Asp.net mvc 如何使用字符串";空气污染指数;在ASP.NET MVC请求URL中?
通过测试和浪费大量时间,我发现ASP.NETMVC有一个bug,它阻止在请求URL中使用字符串“api”。我想用这样的URL访问我的方法Asp.net mvc 如何使用字符串";空气污染指数;在ASP.NET MVC请求URL中?,asp.net-mvc,Asp.net Mvc,通过测试和浪费大量时间,我发现ASP.NETMVC有一个bug,它阻止在请求URL中使用字符串“api”。我想用这样的URL访问我的方法 www.mysite.com/api/test 这不是一个意外的愿望。事实上,这是一个显而易见的Url选择 是否有解决方法来实现这一点 更新 按请求路由定义 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*
www.mysite.com/api/test
这不是一个意外的愿望。事实上,这是一个显而易见的Url选择
是否有解决方法来实现这一点
更新
按请求路由定义
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// this executes, checked it in debugger
routes.MapRoute(
name: "Test",
url: "api/test",
defaults: new { controller = "Api", action = "Test" }
);
}
高级控制器
public class ApiController : Controller
{
public ActionResult Test()
{
return Content("TEST TEST TEST");
}
{
如果安装了WebApi软件包,您将在App_Start中找到WebApiConfig.cs类。下面是它的样子:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
因此,假设您不更改Global.asax.cs中的默认代码,此路由将添加到路由表中。因此,为什么您的/api/无论什么路由都不起作用
如果您没有使用WebApi,我建议删除这些包。否则,您只需将API路由的“根”部分更改为其他内容:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
/* changed 'api' to 'restsvc' */
routeTemplate: "restsvc/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
这真的是真的吗?展示你的路线定义。@Robert相信我。这是真的,我在这上面浪费了两天,很难相信,但事实确实如此。我在电脑上测试了它。它很好用。你会展示你的(Api)控制器吗?你也安装了WebAPI软件包吗?如果是这样,那就是WebApi的config class.Yes中默认路由的一部分。如您所述,有一个WebApiConfig。如果我是正确的,这是一个带有静态方法soi的静态类,它在所有操作之前执行,并优先于我的路由。但为什么会这样呢?我从来没有添加过这个,这是完全没有记录的。我在任何地方都找不到这方面的任何信息。在这一点上,我对微软的这一愚蠢行为感到非常不安,如果你能链接到somer资源,我将不胜感激,这将为这个问题提供更多的线索。ASP.NET MVC本身就是一个陷阱。他不需要更新WebApiConfiq。如果他把
GlobalConfiguration.Configure(WebApiConfig.Register)
放在RouteConfig.registerOutes(RouteTable.Routes)
@Mahedi谢谢。你的两个建议都是关于MVC设计有多糟糕,没有封装的暗示。虽然这不是我的问题的一部分,但它仍然是开放的,为什么这个东西设置成这样。如何防止将来发生类似MS的愚蠢行为。@f470071它是MVC4的T4模板的一部分。MVC5的工具可以更容易地省略WebAPI位。