1

我正在尝试创建一个 MVC 4 应用程序,我对此有点陌生。如何将路由映射到特定的文件扩展名?

我想做这样的事情:

Controller/Action/ (maybe an ID) 

这应该返回一个 MVC 视图,供用户在他们的浏览器中查看。

在另一种情况下:

Controller/Action/ (Maybe an ID) .json

或者:

Controller/Action/ (Maybe an ID) .xml

这应该返回相同的对象,但在 JSON 或 XML 中,供 web 服务使用。

4

2 回答 2

0

与其说是映射到扩展,不如说是 MVC 4 URL 不需要直接对应于文件。相反,您注册路由,这些路由对应于控制器操作。因此,为此,您可以使用以下路线:

  • /something/page/{ID}哪个链接SomeController.ShowPage(int ID)返回一个ViewResult
  • /something/page/{ID}/xml哪个链接SomeController.PageAsXML(int ID)返回一个XDocument
  • /something/page/{ID}/json which links toSomeController.PageAsJSON(int ID) which returns aJsonResult`

当您的服务器启动时,这些路由由 Application_Start() 代码中调用的方法注册。XML 页面示例的简单路由注册如下所示:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
        "PageView_XML",
        "{controller}/page/{id}/xml",
        new { id = "" }  
        );
    }
}

在这里,路由被调用"PageView_XML"以适应一个假设的命名方案,其中还有 a"PageView"和 a "PageView_JSON"。名称必须是唯一的。任何与该模式匹配的 URL{controller}/page/{id}/xml都将使用此路由,其中​​任何写法{this}都是一个参数,它将与正确位置的任何字符串匹配。您会注意到它{id}的默认值是""(一个空字符串),这可能不是很有用;您可以选择您的控制器方法将识别并使用的东西来显示合适的错误页面。

您可以混合使用{param}标签和文本,这样{controller}/page/{id}-xml甚至{controller}/page/{id}_{format}可以工作。我不太确定,{controller}/page/{id}.xml或者{controller}/page/{id}.{format}因为它的处理方式可能.不同。

查看有关路由的 MSDN 信息,尤其是有关添加路由的更多详细信息。O'Reilly也有一些方便的信息。

于 2013-02-15T11:05:12.270 回答
0

您可以在 MVC4 Web API 的 Json 和 Xml Mediatypeformatters 上使用名为 AddUrlPathExtensionMapping 的扩展方法,使您能够请求这些特定格式的数据。

于 2013-02-15T16:31:17.123 回答