ASP.NET路由:根据扩展名返回特定格式

时间:2013-02-15 08:04:09

标签: asp.net-mvc-4 asp.net-mvc-routing

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

我想做这样的事情:

Controller/Action/ (maybe an ID) 

这应返回MVC视图,供用户在浏览器中查看。

在另一种情况下:

Controller/Action/ (Maybe an ID) .json

或:

Controller/Action/ (Maybe an ID) .xml

这应该返回相同的对象,但是以JSON或XML形式返回,供Web服务使用。

2 个答案:

答案 0 :(得分: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 to SomeController.PageAsJSON(int ID)which returns a JsonResult`

这些路由是在服务器启动时通过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",以符合假设的命名方案,其中还有"PageView""PageView_JSON"。名称必须是唯一的。 与模式{controller}/page/{id}/xml匹配的任何URL都将使用此路由,其中​​任何类似{this}的内容都是与正确位置的任何字符串匹配的参数。您会注意到{id}的默认值为""(空字符串),这可能不是很有用;您可以选择控制器方法将识别并用于显示合适错误页面的内容。

您可以混合{param}个标签和文字,因此{controller}/page/{id}-xml甚至{controller}/page/{id}_{format}都可以使用。我对{controller}/page/{id}.xml{controller}/page/{id}.{format}不太确定,因为它可能会以不同方式处理.

查看the MSDN info on routing,特别是this bit,了解有关添加路线的详细信息。 O'Reilly也有一些方便的信息。

答案 1 :(得分:0)

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