Маршрутизация атрибутов MVC не работает

Я относительно новичок в структуре MVC, но у меня есть действующий веб-проект с controllerом API, который использует AttributeRouting (пакет NuGet), однако я начинаю новый проект, и он просто не хочет следовать маршрутам, которые я ввел место.

controller:

public class BlazrController : ApiController { private readonly BlazrDBContext dbContext = null; private readonly IAuthProvider authProvider = null; public const String HEADER_APIKEY = "apikey"; public const String HEADER_USERNAME = "username"; private Boolean CheckSession() { IEnumerable tmp = null; List apiKey = null; List userName = null; if (!Request.Headers.TryGetValues(HEADER_APIKEY, out tmp)) return false; apiKey = tmp.ToList(); if (!Request.Headers.TryGetValues(HEADER_USERNAME, out tmp)) return false; userName = tmp.ToList(); for (int i = 0; i < Math.Min(apiKey.Count(), userName.Count()); i++) if (!authProvider.IsValidKey(userName[i], apiKey[i])) return false; return true; } public BlazrController(BlazrDBContext db, IAuthProvider auth) { dbContext = db; authProvider = auth; } [GET("/api/q/users")] public IEnumerable Get() { return new string[] { "value1", "value2" }; } [GET("api/q/usersauth")] public string GetAuth() { if (!CheckSession()) return "You are not authorized"; return "You are authorized"; } } 

AttributeRoutingConfig.cs

 public static class AttributeRoutingConfig { public static void RegisterRoutes(RouteCollection routes) { // See http://github.com/mccalltd/AttributeRouting/wiki for more options. // To debug routes locally using the built in ASP.NET development server, go to /routes.axd routes.MapAttributeRoutes(); } public static void Start() { RegisterRoutes(RouteTable.Routes); } } 

Global.asax.cs:

// Примечание. Для инструкций по включению classического режима IIS6 или IIS7 // посетите http://go.microsoft.com/?LinkId=9394801

 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } 

Когда я пытаюсь перейти к / api / q / users – я получаю 404 не найденную ошибку. Если я изменю маршруты как «/ api / blazr / users», я получаю сообщение об ошибке в нескольких действиях и не могу определить, какое действие нужно предпринять.

Любая помощь приветствуется – мне действительно нужно немного подтолкнуть, чтобы выяснить, в чем проблема, нет необходимости полностью ее решать (мне нужно учиться!)

Спасибо

РЕДАКТИРОВАТЬ

routes.axd:

 api/{controller}/{id} {resource}.axd/{*pathInfo} {controller}/{action}/{id} 

Вам не только routes.MapMvcAttributeRoutes() вызов routes.MapMvcAttributeRoutes() в App_Start\RouteConfig.cs , он должен появиться перед определением маршрута по умолчанию! Я добавляю его до этого и после игнорирования {resource}.axd{*pathInfo} . Просто выяснилось, что попытка заставить маршрутизацию атрибутов правильно работать с моим веб-сайтом MVC 5.

  public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes(); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional } ); } 

В вашем App_Start / RoutesConfig.cs

убедитесь, что вы вызываете следующую строку кода:

  routes.MapMvcAttributeRoutes(); 

В диспетчере пакетов nuGet установите в свой веб-узел веб-хостинг веб-API

добавьте этот class в папку app_start-> WebApiConfig.cs (если он не выйдет – создайте):

  public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); // pay attention to this method //here you can map any mvc route //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional } //); config.EnableSystemDiagnosticsTracing(); } } 

после Попробуйте изменить конфигурацию Global.asax на:

 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); } } 

PS

просмотрите эту статью, очень полезно http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

ура

Я пришел сюда для поиска ответов, связанных с RoutePrefix . После некоторого тестирования я обнаружил, что просто добавляя

[RoutePrefix("MyPrefix")]

без использования последующего атрибута Route, такого как

[Route("MyRoute")]

означает, что RoutePrefix был проигнорирован. Haute’s routedebugger очень помогает в определении этого: https://haacked.com/archive/2008/03/13/url-routing-debugger.aspx/

Просто добавьте его через NuGet, который добавит строку в ваши настройки приложения, а затем все ваши маршруты будут отображаться внизу вашей страницы. Очень рекомендую для любых проблем маршрутизации.

В конце концов, моя окончательная версия выглядит так:

[RoutePrefix("Asset/AssetType")] [Route("{action=index}/{id?}")]

Убедитесь, что у вас установлен пакет NuGet «API WebApp» для AttributeRouting.