EDIT: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). NB мои примеры для WebAPI, но концепция похожа. – Aron
@Aron 'app.UseMvcWithDefaultRoute()' предположительно настраивает это ([источник] (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