我有一些自己的控制器,并且路由基本上是根据属性进行的。问题是,当我用Postman模拟我的http请求时,该程序似乎不知道所提供的路由。
我的控制器如下所示:
{{ form_label(form.moisAnne) }}
<div class="form-group">
<label class="nom-l-kiity"> mois </label>
{{ form_widget(form.moisAnne) }}
</div>
{{ form_errors(form.moisAnne) }}
{{ form_label(form.moisAnne) }}
<div class="form-group">
<label class="nom-l-kiity"> mois </label>
{{ form_widget(form.moisAnne) }}
</div>
{{ form_errors(form.moisAnne) }}
here mois == month
and annee == year
请注意,Global.asax.cs调用了与Web Api 2兼容的配置:
[RoutePrefix("register")]
public class RegisterController : ApiController
{
private readonly IRegisterService _service;
public RegisterController(IRegisterService service)
{
_service = service;
}
[HttpPost]
[Route("simple")]
public void RegisterSimple(RegisterArgs args)
{
_service.RegisterSimple(args);
}
}
...并且WebApiConfig调用MapHttpAttributeRoutes():
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
// DI Registrations
}
}
当我尝试使用uri从Postman调用POST方法时
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我得到以下答案:
http://localhost:63575/api/register/simple
我确实认为问题出在路由配置中。我对其进行了调试,在两个方法调用(config.MapHttpAttributeRoutes()和config.Routes.MapHttpRoute)之后,配置仅包含两个路由:一个具有空RouteTemplate(“”),另一个具有通过MappHttpRoute()调用提供的路由(“ api / {controller} / {id}”)。 我的问题是-如何通过属性正确配置路由?
答案 0 :(得分:0)
您的控制器级路由前缀应以“ api”开头,如下所示:
[RoutePrefix("api/register")]
public class RegisterController : ApiController