在ASP.NET MVC 5中使用路径属性

时间:2015-04-22 17:20:12

标签: c# asp.net asp.net-mvc visual-studio

这个问题与ASP.NET MVC 5有关。

我正在尝试使用路由属性在我的网址中使用连字符,但我没有任何运气让它工作。 I'm using this questionthis MSDN blog reference.我想要的网址是:

/my-test/
/my-test/do-something

当我构建我的项目并将我正在测试的页面带入浏览器时,我收到404错误。这是我到目前为止的代码:

// RouteConfig.cs
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes();
        AreaRegistration.RegisterAllAreas();
        ...
    }
}

// MyTestController.cs - NOTE: THIS FILE IS IN AN AREA
[RouteArea("MyTest")]
[RoutePrefix("my-test")]
[Route("{action=index}")]
public class MyTestController : Controller
{
    [Route("~/do-something")]
    public JsonResult DoSomething(string output)
    {
        return Json(new
        {
            Output = output
        });
    }

    [Route]
    public ViewResult Index()
    {
        return View();
    }
}

// Index.cshtml
<script>
    $(document).ready(function () {

        // I'm using an ajax call to test the DoSomething() controller.
        // div1 should display "Hello, World!"
        $.ajax({
            dataType: "json",
            type: "POST",
            url: "/product-management/do-something",
            data: {
                output: "Hello, World!"
            }
        }).done(function (response) {
            $("div1").html(response.output);
        });
    });
</script>
<div id="div1"></div>

当我创建区域时,创建了一个区域注册文件,我在该文件中获得了所有路由信息,但根据MSDN博客,我可以删除该文件并完全依赖路由属性。

1 个答案:

答案 0 :(得分:2)

我明白了。该类需要以下RouteAreaAttribute:

[RouteArea("MyTest", AreaPrefix = "my-test")]
public class MyTestController : Controller
{ 
    ...
}

这也允许我删除区域路径注册文件!