具有自定义 HttpMessageHandler 的 MapHttpRoute

MapHttpRoute with custom HttpMessageHandler

因此,在消息处理程序完成后,我无法让路由正常工作。 出现的错误是: 找不到与请求 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 已检查,username/password 弹出窗口出现并被授予,但随后出现上述错误并且路由似乎无效。我尝试了不同的方法来让它工作,但似乎我在这里遗漏了一些东西。

问题已解决

只需注释掉这一行就可以了

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

对于这导致问题的原因有什么想法吗?

你的问题没有在我最后尝试的测试中重现。您似乎在 RoutePrefix 属性中为控制器指定了不同的名称。根据要求Url给出:

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

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

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