編輯:An issue has been opened在GitHub上澄清與答案中的信息的文檔。如果沒有屬性,路由不起作用
我想在我的.NET Core MVC應用程序(對於API)中設置路由。我相信我有一切配置正確,但沒有路線工作(所有返回404),除非行動具有顯式設置的路由屬性。同樣的問題提到here,但他不知道什麼解決了問題。
我把屬性放回去,它工作。我刪除了它們,但沒有。最終通過移除和重新添加路由配置的一些神奇咒語 - 換句話說,關掉它並且換句話說 -
UseMvcWithDefaultRoute()
沒有路由屬性。不知道那裏發生了什麼。
這是我所擁有的簡化版本。有什麼問題?爲什麼沒有設置屬性就不能工作?
在這個例子中,我試圖POST
到/login/register
。
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
})
.AddJsonOptions(options =>
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver());
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
我也試過手動指定路線:
app.UseMvc(routes =>
{
routes.MapRoute(
"default",
"{controller=Home}/{action=Index}/{id?}");
});
登錄控制器:
[Route("[controller]")]
[AllowAnonymous]
public class LoginController : Controller
{
[HttpPost]
[Route("register")] // only works with this here
public IActionResult Register([FromBody]RegisterModel model)
{
return Ok();
}
}
您需要配置「路由」。這是ASP.net怎麼知道其中的URL映射到控制器。有幾種方法可以配置路由。你找到了其中兩個。 [屬性路由](http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2)和[路由表](http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api)。注意我的例子是針對WebAPI的,但概念很相似。 – Aron
@Aron'app.UseMvcWithDefaultRoute()'據說配置([source](https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNetCore/Builder/MvcApplicationBuilderExtensions/#meth-Microsoft .AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvcWithDefaultRoute))。我在'app.UseMvc()'中嘗試了一個顯式路由,但仍然無法工作。 – vaindil
@vaindil,只是爲了排除故障,刪除策略,並嘗試默認'services.AddMvc()'並從那裏工作。逐漸添加一個新的作品,看看它是否有所作爲。 – Nkosi