C# WebApi2 RoutePrefix和端点路由=未找到
我装饰了我的api控制器,例如:C# WebApi2 RoutePrefix和端点路由=未找到,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,我装饰了我的api控制器,例如: [RoutePrefix(“api/admin/notification”)] 公共类语言控制器:BaseController 在内部,我有一个GET端点: [HttpGet] [Route("app/{productGuid}")] public async Task<IHttpActionResult> GetAllNotificationsForApp([FromUri]string productGuid) [HttpGet] [路由(“a
[RoutePrefix(“api/admin/notification”)]
公共类语言控制器:BaseController
在内部,我有一个GET端点:
[HttpGet]
[Route("app/{productGuid}")]
public async Task<IHttpActionResult> GetAllNotificationsForApp([FromUri]string productGuid)
[HttpGet]
[路由(“app/{productGuid}”)]
公共异步任务GetAllNotificationsForApp([FromUri]字符串productGuid)
现在,我假设访问此资源的正确方式是:
获取http://[api url]/api/admin/notification/app/someguid
然而,这会产生404
我所尝试的:
-删除[FromUri]
-将productGuid作为querystring的一部分传递,即../app?productGuid=something
(与/app/{productGuid}
相反)
是的,我正在使用config.maphttpAttribute()我已经验证了其他同样使用RoutePrefix的api控制器是否正常工作
我遗漏了什么吗?[FromUri]
用于强制Web API从URI读取复杂类型。移除它应该是有效的
您还可以研究将参数从string
更改为Guid
,并对路由中的占位符应用适当的约束。ie:[路由(“app/{productGuid:guid}”)]
事实证明,不能有两个具有相同类名的api控制器,即使它们映射到不同的路由
我有另一个名为LanguageController
的控制器,位于不同的命名空间中,并映射到不同的路由;我不得不重新命名其中一个以使其工作
基于[FromUri]
用于强制Web API从URI读取复杂类型。移除它应该是有效的。您还可以研究将参数从string
更改为Guid
,并对路由中的占位符应用适当的约束。ie:[Route(“app/{productGuid:guid}”)]
谢谢你的回答,我已经指出了问题的原因。@carlitross,是的。这种情况有时会发生。很高兴你终于解决了这个问题。快乐编码!!!
[RoutePrefix("api/admin/notification")]
public class LanguageController : BaseController {
//GET: api/admin/notification/app/{guid}
[HttpGet]
[Route("app/{productGuid:guid}")]
public async Task<IHttpActionResult> GetAllNotificationsForApp(Guid productGuid) {...}
}
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}