有一个非常基本的事情要做 - 我需要公开一个post 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}"应该在默认路由器之前放置。仍然无法使用属性路由。
答案 0 :(得分:1)
您的方案应该只使用属性路由,而不必将名称更改为PswdrecController
。您确定要使用System.Web.Http
命名空间中的Route属性吗?
答案 1 :(得分:1)
配置路由器打开文件App_Start / WebApiConfig.cs并将此代码放在下面:
config.Routes.MapHttpRoute(
name: "MyCustomRouteApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "mobile", action = "pswdrec", id = RouteParameter.Optional}
);
编辑默认行:根据您的情况。这只是一个例子。
希望能帮到你!答案 2 :(得分:1)
对于属性路由,您的routes.MapMvcAttributeRoutes();
中是否有RegisterRoutes
?我在你的代码中没有看到它。如果没有此行,属性路由将不起作用。