Chr*_*isP 0 asp.net asp.net-mvc asp.net-mvc-4
在MVC4 Web API项目中,下面有"itemtypelist"路由
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "itemtypelist",
url: "{controller}/list/{itemtype}/{searchtext}",
defaults: new { controller = "home", action = "list", itemtype = (string)null, searchtext = (string)null }
);
}
Run Code Online (Sandbox Code Playgroud)
它旨在映射到以下控制器操作
[AcceptVerbs("GET", "POST")]
public IEnumerable<Repository.ViewModel.Brand> List(string itemType, string searchText)
Run Code Online (Sandbox Code Playgroud)
和URL
/api/brand/list/mytype/mysearchtext
Run Code Online (Sandbox Code Playgroud)
但是,URL返回404消息.此路由和控制器操作在网站项目中工作,但不在Web API项目中工作.MVC4 Web API项目中有什么不同会导致无法找到操作?
MVC4 Web API项目中有什么不同会导致无法找到操作?
一切都不一样.绝对一切.从配置API路由的方式开始,经历整个模型绑定,直到基本控制器.所以,如果你想开发一个Web API,基本上你会忘记你对ASP.NET MVC的所有了解.微软已经复制了每一件事.这是一个新设计,新程序集,新命名空间,新API.与ASP.NET MVC无关.
因此,如果要配置Web API路由,则需要使用MapHttpRoute扩展方法,而不是MapRoute仅用于标准MVC控制器.不要将基础System.Web.Mvc.Controller(您习惯在MVC应用程序中使用)与System.Web.Http.ApiController(API控制器的基类)混淆.那是两个完全不同的野兽.
所以这里是如何配置ApiController的路由:
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultAPI",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
另请注意,在RESTful API中,您未在路径中指定操作名称.它是从用于使用它的HTTP动词中假设的.这是good article我建议您阅读Web API中的RESTful路由.
顺便说一下,如果您使用Internet或空模板创建新的ASP.NET MVC 4项目,您会注意到Visual Studio将为您创建2个文件:
~/App_Start/RouteConfig.cs - 放置所有标准MVC路线的地方~/App_Start/WebApiConfig.cs - 放置所有Web API配置的位置(包括路由,自定义格式化程序......)您还会注意到他们使用了两种完全不同的方法.不要忘记Web API可以自托管,例如在控制台应用程序中.这就是微软决定从头开始实现一切的原因.他们不希望与ASP.NET MVC有任何耦合.
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |