Ich habe einen Fall, in dem ich keine Standardroute zum Arbeiten über Config.Routes.MapHttpRoute()
bekommen kann, aber wenn ich die Route als Routenattribut in den Controller setze, funktioniert es gut.WebAPI MapHttpRoute funktioniert nicht, aber AttributeRouting funktioniert
Global.asax
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
//RouteConfig.RegisterRoutes(RouteTable.Routes);
//BundleConfig.RegisterBundles(BundleTable.Bundles);
}
(entfernt den letzten zwei, wie sie sind nicht-WebAPI Anforderungen (oder?) Gleiche Ergebnis auch wenn ich sie in verlassen)
WebApiConfig.cs
public static void Register(HttpConfiguration config) {
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
-Controller
public class ErrorsController : ApiController
{
[HttpGet]
[Route("v1/Errors/Get")]
public IHttpActionResult Get(int id) {
return Ok();
}
[HttpPost]
[Route("v1/Errors/Submit")]
public IHttpActionResult Submit()
{
// do stuff
return Ok();
}
}
Wenn ich die Attribute Routen drin habe, funktioniert alles gut. Wenn ich es nicht tue, bekomme ich 404s. Zum Beispiel die beiden folgenden Bericht ein Fehler 404:
localhost:myport/v1/Errors/Get?id=5
localhost:myport/v1/Errors/Submit
Doch, wenn ich angebe dies:
localhost:myport/v1/Errors
erhalte ich die folgende Antwort:
No HTTP resource was found that matches the request URI ' http://localhost:59498/v1/Errors/ '.
No type was found that matches the controller named 'v1'.
Offensichtlich tritt meine Routenkonfiguration nicht ein, aber für das Leben von mir kann ich nicht sagen, warum. Ich habe sogar versucht, den Routennamen zu Default
anstelle von DefaultApi
zu ändern, denkend, dass vielleicht Default
eine interne Bedeutung hatte.
Ah ha ... das macht Sinn. Aber um dies zu bestätigen, ist dies für spezielle Routen im Nicht-Web-API-Routing in Ordnung? (Ich habe ähnliche Konstrukte mit Präfixen als nicht standardmäßige Routen in regulären MVC verwendet). Auf jeden Fall danke für die Antwort - jetzt weiß ich warum (und habe auch einen nützlichen Link). – jleach