我正在尝试创建一个MVC 4应用程序,我对此有点新鲜。 如何将路由映射到特定的文件扩展名?
我想做这样的事情:
Controller/Action/ (maybe an ID)
这应返回MVC视图,供用户在浏览器中查看。
在另一种情况下:
Controller/Action/ (Maybe an ID) .json
或:
Controller/Action/ (Maybe an ID) .xml
这应该返回相同的对象,但是以JSON或XML形式返回,供Web服务使用。
答案 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的扩展方法,以便您能够以这些特定格式请求数据。