Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何使用字符串";空气污染指数;在ASP.NET MVC请求URL中?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 如何使用字符串";空气污染指数;在ASP.NET MVC请求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/{*

通过测试和浪费大量时间,我发现ASP.NETMVC有一个bug,它阻止在请求URL中使用字符串“api”。我想用这样的URL访问我的方法

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位。