如何为简单的子文件夹/操作案例定义路由?

时间:2015-05-30 12:24:27

标签: asp.net-mvc

我想制作简单的ASP.NET MVC应用程序(或称之为hhtp服务),这样我就可以使用POST方法发布一些简单的数据。 我想使用以下网址:

www.mysite.com/api/postdata

然而,我没有想出如何配置RouteConfig和contoller。 我最好的尝试是,我已经尝试了其他几十个:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "ApiPostData",
        url: "api/postdata",
        defaults: new { controller = "Api", action = "PostData" }
    );
}

我的控制器:

public class ApiController : Controller
{
    //[HttpPost]
    public JsonResult PostData(PostData postData)
    {
        // save to database
        retun Json(true);
    }
}

Type PostData也被声明为更简单的对象。

为什么这不起作用?我总是得到错误404.我已经尝试了很多变化。阅读数百页,但不是单一的工作示例。 A也遇到过一些叫做区域的东西,但我拒绝相信这么多琐碎的任务需要这么多的编码和复杂功能。这不可能是真的。

编辑 - 更新:

我准备了更加琐碎的测试用例:

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");
    }
}

所以,如果我用

来称呼它
localhost/site/api/test

我应该得到“TEST TEST TEST”作为回应。错!!! 我得到的是

未找到与请求URI“http://localhost/site/api/test”匹配的HTTP资源。未找到与名为“test”的控制器匹配的类型。

发生了什么????

更新

我绝望地尝试了这个没有“文件夹”的直接版本。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
            name: "Test2",
            url: "test",
            defaults: new { controller = "Api", action = "Test" }
    );
}

我可以用

打电话
www.mysite.com/test

它会返回TEST TEST TEST。

更新

这似乎是一个错误。 如果我将上面的MapRoute重新配置为目标

www.mysite.com/xxx/test

它有效。看来如果url包含字符串“api”就会中断。

1 个答案:

答案 0 :(得分:1)

尝试这条路线:

routes.MapRoute(
    name: "ApiPostDAta",
    url: "api/{action}/{PostData}",
    defaults: new { controller = "Api", action = "PostData", PostData = UrlParameter.Optional }
);

例如,这将与“www.mySite.com/Api/PostData/12345”等请求相匹配。