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

Asp.net mvc 4 ASP.NET路由:根据扩展名返回特定格式,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我正在尝试创建一个MVC4应用程序,对此我还是个新手。 如何将路由映射到特定的文件扩展名 我想这样做: Controller/Action/ (maybe an ID) public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute( "Pa

我正在尝试创建一个MVC4应用程序,对此我还是个新手。 如何将路由映射到特定的文件扩展名

我想这样做:

Controller/Action/ (maybe an ID) 
public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
        "PageView_XML",
        "{controller}/page/{id}/xml",
        new { id = "" }  
        );
    }
}
这将返回一个MVC视图,供用户在浏览器中查看

在另一种情况下:

Controller/Action/ (Maybe an ID) .json
或:


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

它没有太多到扩展的映射-MVC4URL不需要直接与文件对应。相反,您可以注册与控制器操作相对应的路由。因此,您可以选择以下路线:

  • /something/page/{ID}
    它链接到
    SomeController.ShowPage(int-ID)
    它返回一个
    ViewResult
  • /something/page/{ID}/xml
    链接到
    SomeController.PageAsXML(int-ID)
    ,返回
    XDocument
  • /something/page/{ID}/json,链接到
    SomeController.PageAsJSON(int-ID)
    ,返回一个
    JsonResult`
服务器启动时,这些路由由应用程序_Start()代码中调用的方法注册。XML页面示例的简单路由注册如下所示:

Controller/Action/ (maybe an ID) 
public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
        "PageView_XML",
        "{controller}/page/{id}/xml",
        new { id = "" }  
        );
    }
}
这里,路由被称为
“PageView\u XML”
,以适应一个假设的命名方案,其中还有一个
“PageView”
和一个
“PageView\u 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}
,因为它可能会以不同的方式处理


请查看,特别是有关添加路线的更多详细信息。还有一些方便的信息。

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