如何使用字符串" api"在ASP.NET MVC请求URL?

时间:2015-05-30 16:37:26

标签: asp.net-mvc

通过测试和浪费大量时间,我发现ASP.NET MVC有一个错误,阻止使用字符串" api"在请求URL中。我想用这样的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" }
    );
}

ApiController

public class ApiController : Controller
{
    public ActionResult Test()
    {
        return Content("TEST TEST TEST");
    }

{

1 个答案:

答案 0 :(得分:2)

如果安装了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 }
        );
    }
}