【发布时间】:2014-03-24 16:36:03
【问题描述】:
有一件非常基本的事情要做 - 我需要公开一个帖子 API,例如 mobile/api/pswdrec,我想将其绑定到我的 PasswordController 以避免那个沉闷的名称。
这是一个带有区域的 webapi,我正在尝试属性路由和MapHttpRoute。到目前为止都没有。
public class PasswordController : MobileApiControllerBase
{
//[Route("api/mobile/pswdrec/")]
public RestResponseMessage Post(UserCredentialsModel credentials)
{
return RestResponseMessage.OK();
}
}
检查了客户端,请求是正确的 json 请求。当我简单地将控制器的名称更改为 PswdrecController 时,它就开始工作了。
还有其他方法可以“重命名”控制器吗?
多年来一直致力于 MVC,但现在陷入了一个非常简单的问题 :) 感谢您的帮助;)
编辑:
public class MobileApiAreaRegistration : AreaRegistration
{
private static IWindsorContainer _container = new WindsorContainer();
public override string AreaName
{
get
{
return "MobileApi";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.MapHttpRoute(
name: "MobileApiDefault",
routeTemplate: "api/mobile/{controller}/{id}",
defaults: new { controller = "Expenses", id = RouteParameter.Optional }
);
}
public static void SetupWebApi(HttpConfiguration configuration)
{/* just javascript serizlizer setup */}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
MobileApiAreaRegistration.SetupWebApi(config);
}
public static void SetupWindsorContainer(IWindsorContainer container)
{
MobileApiAreaRegistration.SetupWindsorContainer(container);
WebApiAreaRegistration.SetupWindsorContainer(container);
}
}
public class WebApiApplication : HttpApplication
{
private static readonly IWindsorContainer _container = new WindsorContainer();
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
InitializeWindsorContainer();
//InitializeExceptionFilters();
}
}
没什么特别的,但我不能让它工作。当我使用控制器的原始名称时,它就像星星一样闪耀:)
解决方案:好吧,问题出在路由器的优先级上,所以“api/mobile/pswdrec/{id}”的配置应该放在默认路由器之前。仍然无法使用属性路由。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-web-api