2013-02-15 49 views
1

我正在嘗試創建一個MVC 4應用程序,並且我對此有點新。 如何將路線映射到特定的文件擴展名?ASP.NET路由:根據擴展名返回特定格式

我想要做這樣的事情:

Controller/Action/ (maybe an ID) 

這應該返回一個MVC視圖,用戶在瀏覽器中看到的。

在另一種情況:

Controller/Action/ (Maybe an ID) .json 

或:

Controller/Action/ (Maybe an ID) .xml 

這應該返回相同的對象,但在JSON或XML,Web服務對於使用。

回答

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也有一些方便的信息。

0

您可以在MVC4 Web API的Json和Xml Mediatypeformatters上使用名爲AddUrlPathExtensionMapping的擴展方法,使您可以請求這些特定格式的數據。