想要为基于REST的API使用相同的URL进行GET/PUT/DELETE/POST,但是当关于Actions的唯一不同之处是它接受哪个HTTP谓词时,它认为它们是重复的!
"Type已经定义了一个名为'Index'的成员,它具有相同的参数类型."
我说的是什么呢?这个只接受GET,这个只接受POST ...应该可以共存吗?
怎么样?
如果我已经使用[AcceptVerbs(..)]属性修饰了我的动作方法,我是否必须在路线定义中注册HttpVerb约束(当我注册路线时)?
例如.我有这个.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection)
{ .. }
Run Code Online (Sandbox Code Playgroud)
我是否需要将此添加到引用此操作的路由中,作为约束?
作为我之前的一个问题的结果,我发现了两种在MVC3中处理REST路由的方法.
这是一个后续问题,我试图了解这两种方法之间的事实差异/细微差别.如果可能的话,我正在寻找权威的答案.
方法1:单一路由,在控制器操作上具有操作名称+ Http谓词属性
Global.asax使用指定action参数注册单个路由.
public override void RegisterArea(AreaRegistrationContext context)
{
// actions should handle: GET, POST, PUT, DELETE
context.MapRoute("Api-SinglePost", "api/posts/{id}",
new { controller = "Posts", action = "SinglePost" });
}
Run Code Online (Sandbox Code Playgroud)将两者ActionName和HttpVerb属性应用于控制器操作
[HttpGet]
[ActionName("SinglePost")]
public JsonResult Get(string id)
{
return Json(_service.Get(id));
}
[HttpDelete]
[ActionName("SinglePost")]
public JsonResult Delete(string id)
{
return Json(_service.Delete(id));
}
[HttpPost]
[ActionName("SinglePost")]
public JsonResult Create(Post post)
{
return Json(_service.Save(post));
}
[HttpPut]
[ActionName("SinglePost")]
public JsonResult Update(Post post)
{ …Run Code Online (Sandbox Code Playgroud)asp.net-mvc ×3
http-verbs ×2
acceptverbs ×1
action ×1
c# ×1
http ×1
overloading ×1
rest ×1
routes ×1
routing ×1