这个问题可能是一个骗局,但我找不到类似的问题(不确定究竟要搜索什么)。
假设我有一个像这样的宁静资源网址:
/my/items/6/edit
此页面上有一个表单,允许我编辑我的#6项目。当我提交表单时,它使用PUT X-HTTP-Method-Override标题发送到/my/items/6
。
我的问题是,服务器处理程序应该在哪里获取值" 6"从?它应该从URL获取吗?或者从HTTP POST数据(假设id被呈现为表单上的隐藏输入字段)?
在我看来它应该来自URL。然而,这使它更难以解决它。例如,在.NET MVC中,您可以从控制器操作方法获得它:
var id = int.Parse(ControllerContext.RouteData.Values["id"].ToString());
......这似乎比它的价值更麻烦。但是,如果我们从HTTP POST数据中获取它,那么从技术上讲,您可以将我的项目#6的数据发布/放置到/my/items/7
,并且服务器仍然会将项目数据保存在id#6下。
这里有标准做法吗?
答案 0 :(得分:1)
请检查:http://www.codeproject.com/Articles/190267/Controllers-and-Routers-in-ASP-NET-MVC-3
我不是.net开发人员,但所有平台的最佳实践都是将URI模板映射到控制器。路由器必须解析并准备此类信息并将其传递给您的函数/方法。
答案 1 :(得分:0)
它绝对应该来自URL。在ASP.NET MVC中,如果您的路由定义如下:
routes.MapRoute(
"Default",
"/my/{controller}/{id}/{action}",
new { controller = "items", action = "Index" }
);
您可以从ActionResult方法签名中引用ID,如下所示:
[HttpPut]
public ActionResult Index(int id, MyItemEditModel model)
{
// id would be 6 if the URL was /my/items/6/
// and the model need not contain the id
...