具有自定义 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")]
因此,在消息处理程序完成后,我无法让路由正常工作。 出现的错误是: 找不到与请求 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")]