我正在使用asp.net开发WEB API,我的目标是能够调用这种类型的URL:
/html/countries/...
/json/countries/...
国家/地区是控制器,并且在返回不同结果之前依赖于参数。
我做了什么,似乎不起作用:
routes.MapRoute(
name: "Default",
url: "api/{action}/{controller}",
defaults: new
{
}
);
CountriesController:
[ActionName("html")]
public string get()
{
//...
}
[ActionName("json")]
public void getType()
{
//...
}
任何sugestions? 修改 我有7个控制器。
还有一些可能的网址:
/html/{controller}/x/y
/json/{controller}/x/y/order/h
/html/{controller}/x/z/order/y/j
/json/{controller}/x/z/order/y/j
答案 0 :(得分:0)
首先请允许我说,如果“html”或json动作意味着“格式”,那么它们不应该是你的控制器的一部分,它们是媒体类型,需要以不同的方式配置
Web Api v1在 application_start 事件的 global.asax 中全局定义资源。假设您使用的是Visual Studio 2013并且基于Microsoft默认模板,则您的方法可能如下所示:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
此处发生WebApi路由配置WebApiConfig.Register
,而此处发生MVC配置RouteConfig.RegisterRoutes
您的WebApi路由配置应如下所示
public static class WebApiConfig{
public static void Register(HttpConfiguration config){
config.Routes.MapHttpRoute(
name: "htmltApi",
routeTemplate: "html/{action}/{controller}",
);
config.Routes.MapHttpRoute(
name: "jsonApi",
routeTemplate: "json/{action}/{controller}",
);
...
另一个重要的细节是WebApi v2引入了一些名为路由属性的东西,它们可以与您的Controller类一起使用,并且可以促进路由配置。
例如:
public class BookController : ApiController{
//where author is a letter(a-Z) with a minimum of 5 character and 10 max.
[Route("html/{id}/{newAuthor:alpha:length(5,10)}")]
public Book Get(int id, string newAuthor){
return new Book() { Title = "SQL Server 2012 id= " + id, Author = "Adrian & " + newAuthor };
}
[Route("json/{id}/{newAuthor:alpha:length(5,10)}/{title}")]
public Book Get(int id, string newAuthor, string title){
return new Book() { Title = "SQL Server 2012 id= " + id, Author = "Adrian & " + newAuthor };
}
...
答案 1 :(得分:-1)
感谢Dalorzo回答我确实发现了问题:
出现问题是因为我的应用程序是按以下方式创建的:
导致创建了两个文件, RouteConfig.cs (MVC)和 WebApiConfig.cs (WEB API):
什么是错误,问题中的代码来自 RouteConfig.cs
放完代码后
config.Routes.MapHttpRoute(
name: "Default",
routeTemplate: "api/{action}/{controller}",
defaults: new
{
action = "html"
}
);
在 WebApiConfig.cs 中,正常工作。