Dan*_*zik 8 c# asp.net asp.net-mvc asp.net-core-mvc
我是ASP.NET的新手,最近遇到了这个我在网上找不到的错误(也许是因为最近发布的MVC 6?)
System.InvalidOperationException The following errors occurred with attribute routing information:
Run Code Online (Sandbox Code Playgroud)
错误1:
具有相同名称'GetByIdRoute'的属性路由必须具有相同的模板:操作:'Appname.Web.Controllers.MemberController.GetById' - 模板:'api/Member/{id:int}'操作:'Appname.Web.Controllers .PaymentController.GetById' - 模板:'api/Payment/{id:int}'动作:'Appname.Web.Controllers.PlanController.GetById' - 模板:'api/Plan/{id:int}'
这为startup.cs提供了一个代码片段
Line 73:
Line 74: // Add MVC to the request pipeline.
Line 75: app.UseMvc(routes =>
Line 76: {
Line 77: routes.MapRoute(
Run Code Online (Sandbox Code Playgroud)
第75行突出显示
还有这个:
at Microsoft.AspNet.Mvc.ControllerActionDescriptorBuilder.Build(ApplicationModel application)
at Microsoft.AspNet.Mvc.Core.ControllerActionDescriptorProvider.GetDescriptors()
at Microsoft.AspNet.Mvc.Core.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context)
at Microsoft.AspNet.Mvc.Core.DefaultActionDescriptorsCollectionProvider.GetCollection()
at Microsoft.AspNet.Mvc.Core.DefaultActionDescriptorsCollectionProvider.get_ActionDescriptors()
at Microsoft.AspNet.Mvc.Routing.AttributeRoute.GetInnerRoute()
at Microsoft.AspNet.Mvc.Routing.AttributeRoute..ctor(IRouter target, IActionDescriptorsCollectionProvider actionDescriptorsCollectionProvider, IInlineConstraintResolver constraintResolver, ILoggerFactory loggerFactory)
at Microsoft.AspNet.Mvc.Routing.AttributeRouting.CreateAttributeMegaRoute(IRouter target, IServiceProvider services)
at Microsoft.AspNet.Builder.BuilderExtensions.UseMvc(IApplicationBuilder app, Action<IRouteBuilder> configureRoutes)
at Appname.Web.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory) in ... Startup.cs:line 75
Run Code Online (Sandbox Code Playgroud)
Pyl*_*iev 11
您可以指定路径名称.
在Web API中,每个路由都有一个名称.路由名称对于生成链接非常有用,因此您可以在HTTP响应中包含链接.
[HttpGet("{id}", Name = "GetPerson")]
public IActionResult Get(int id)
{
var item = this.PeopleRepository.GetById(id);
if (item == null)
{
return this.HttpNotFound();
}
return new ObjectResult(item);
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,您可以拥有另一个具有相同操作名称(但路径名称不同)的控制器
[HttpGet("{id}", Name = "GetPurchase")]
public IActionResult Get(int id)
{
var item = this.PurchaseRepository.GetById(id);
if (item == null)
{
return this.HttpNotFound();
}
return new ObjectResult(item);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5297 次 |
| 最近记录: |