MapHttpRoute与自定义HttpMessageHandler

时间:2015-05-21 12:21:58

标签: c# http routes asp.net-web-api

所以我在消息处理程序完成后遇到麻烦让路由正常工作。 显示的错误是: 未找到与请求URI匹配的HTTP资源

这是我到目前为止所得到的:

http://localhost:51077/api/v1/project/getprojects?apikey=123456

        // all actions under /project routes require authentication
        config.Routes.MapHttpRoute(
            "ProjectApi",
            "api/v1/{controller}/{action}/{apikey}",
            new { apikey = RouteParameter.Optional },
            null,
            HttpClientFactory.CreatePipeline(
                      new HttpControllerDispatcher(config), 
                      new DelegatingHandler[]{new BasicAuthHandler(config)}));

        // all routes requires an api key
        config.MessageHandlers.Add(new ApiKeyHandler());
        config.MapHttpAttributeRoutes();
[RoutePrefix("api/v1/ProjectController")]
public class ProjectController : BaseApiController
{
    [HttpGet]
    [Route("getprojects")]
    public HttpResponseMessage GetProjects()
    {
        HttpResponseMessage resp = new HttpResponseMessage(HttpStatusCode.OK);
        if(User.Identity.IsAuthenticated)
        {
        }
        return resp;
    }
}

因此,如果所有呼叫都包含ApiKey以便能够连接(ApiKeyHandler),则首先检查所有呼叫然后出现弹出窗口并询问用户名和密码(BasicAuthHandler)。如果登录成功,则应将其转发到/ project ...

下的getprojects方法

选中ApiKey,出现用户名/密码弹出窗口并被授予,但随后出现上述错误并且路径似乎无效。我已经尝试了不同的方法来实现这一点,但似乎我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:0)

问题已解决

只需注释掉这一行就行了

[Route("getprojects")] // <--- COMMENT/REMOVE THIS LINE

为什么会导致这个问题的任何想法?

答案 1 :(得分:0)

您的问题在我的测试中没有复制,我在最后尝试过。您的RoutePrefix属性中的控制器似乎有不同的名称。根据Url给出的请求:

  

http://localhost:51077/api/v1/project/getprojects?apikey=123456

ProjectController类上的RoutePrefix属性应如下所示:

[RoutePrefix("api/v1/Project")]