所以我在消息处理程序完成后遇到麻烦让路由正常工作。 显示的错误是: 未找到与请求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,出现用户名/密码弹出窗口并被授予,但随后出现上述错误并且路径似乎无效。我已经尝试了不同的方法来实现这一点,但似乎我在这里遗漏了一些东西。
答案 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")]