在编写具有前端和JSON路径的MVC应用程序时,建议使用哪种命名约定?
例如,假设您网站的用户有“事物”。他们应该能够访问页面来查看他们的内容,但我们还需要一种方法将这些内容作为JSON提取回其他页面。我已经能够想到几个选项,但我对其中任何一个都不够兴奋。这就是我所拥有的:
欢迎所有和任何建议,谢谢!
答案 0 :(得分:15)
可以说道路名称都可以是相同的。您可以检查客户端所需响应的mime类型的Accept标头,然后根据您在那里找到的内容返回相应的视图:
浏览器将此字段设置为HTML;您的JSON客户端只需根据需要设置此字段。
答案 1 :(得分:1)
任何人都不太可能将请求JSON的URL加入书签,所以我认为保持URL干净并不重要。它也可能以编程方式生成,而不是手动输入。鉴于这些,我会考虑将其添加为查询参数。
/things/list -- HTML
/things/list?format=json -- JSON
如果您有ID参数或需要其他参数,这不会破坏您的网址。它也适用于POST和GET。
/things/1 -- HTML for "thing 1"
/things/1?format=json -- JSON for "thing 1"
答案 2 :(得分:1)
我使用
的惯例/things/list -- HTML
/things/_listpage -- AJAX
规则是所有AJAXed操作/视图都有一个前导下划线。这告诉我他们从未被称为顶级,并且通常没有关联的母版页。在这种情况下,我将操作保持在同一个控制器下,以便共享任何相关的逻辑。
通常在列表视图中我会有一个
<% RenderAction("_listpage", "things", new {page = ViewData["CURRENT_PAGE"]}); %>
答案 3 :(得分:-1)
我建议对@RedFilter
的建议稍作修改/细化/things/list -- HTML
/things/_list -- return HTML help and examples (more for you than them).
/things/_list/schema -- schema info
/things/_list/json -- JSON format
/things/_list/xml -- XML format
/things/_list/csv -- csv format
/things/_list/tab -- tab deliminated format
/things/_list/wdsl -- implemented soap web service
等。我觉得它更具可扩展性。它看起来很可怕,但很容易通过装饰器传递数据内容,这是基于所请求的格式,只需几行代码即可提供一整套文件格式。
这是一个粗略的概念性例子:
public ActionResult _list(string id)
{
string data = "";
DataTable oDataTable = this.oDAO.Get("list"); // pretend data retrieval
try{
if(!String.IsNullOrEmpty(id)){
data = this.oDecorator.FormatData(id,oDataTable);
this.ContentTypeChange(id); // change application handler
}else{
data = this.GetHelp("_list");
}
}catch{}
ViewData["data"] = data;
return View();
}
...帮助可以是更多的功能列表,技术示例或任何您想要的。当然,您可以从拥有原生JSON开始,并在需求增长时为您的装饰器添加更多数据格式。对于我的许多项目来说,它是由AJAX开始的纯粹json休息,并且往往会根据网站流行度开展其他格式,所以我发现这足够强大,可以在企业环境中用于经常增长的小型项目大。