我应该如何在 Mvc 5 中路由 POST 和 GET
How should i route POST and GET in Mvc 5
我刚开始在我的 Web 应用程序中使用路由,虽然我已经阅读了很多关于什么是路由以及如何编写 RouteConfig.cs
或在我的控制器中使用属性路由的教程,但很少有教程真正说明如何处理整个应用程序。
像大多数 Asp.NET Mvc 应用程序一样,当您构建控制器时,您会获得创建、编辑、删除方法,并且您总是有一个 GET
和一个 POST
。
但是你如何处理这些方法的路由?
假设这些是我的 Edit 方法,我在 post 路由方法上放了什么?当我单击 "save" 按钮时,我是否需要 "fix" 其他任何东西才能使该路由正常工作?
// GET: VehicleModels/Edit/5
[Route("Aanbod/Edit/{id:int}")]
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
VehicleModels vehicleModels = db.VehicleModels
.Include(v => v.Options)
.Include(v => v.Fotos)
.SingleOrDefault(v => v.Id == id);
if (vehicleModels == null)
{
return HttpNotFound();
}
return View(vehicleModels);
}
// POST: VehicleModels/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int? id, IEnumerable<HttpPostedFileBase> uploads)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var VehicleToUpdate = db.VehicleModels.Find(id);
if (TryUpdateModel(VehicleToUpdate))
// my code here
return View(VehicleToUpdate);
}
如果您使用属性路由,GET 和 POST 操作将具有相同的路由属性。唯一可能不同的是如果你命名你的路由,在这种情况下,名称应该只出现在 GET 版本上。您不能将相同的名称应用于两条不同的路线,即使它们实际上是 相同 路线。
我刚开始在我的 Web 应用程序中使用路由,虽然我已经阅读了很多关于什么是路由以及如何编写 RouteConfig.cs
或在我的控制器中使用属性路由的教程,但很少有教程真正说明如何处理整个应用程序。
像大多数 Asp.NET Mvc 应用程序一样,当您构建控制器时,您会获得创建、编辑、删除方法,并且您总是有一个 GET
和一个 POST
。
但是你如何处理这些方法的路由?
假设这些是我的 Edit 方法,我在 post 路由方法上放了什么?当我单击 "save" 按钮时,我是否需要 "fix" 其他任何东西才能使该路由正常工作?
// GET: VehicleModels/Edit/5
[Route("Aanbod/Edit/{id:int}")]
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
VehicleModels vehicleModels = db.VehicleModels
.Include(v => v.Options)
.Include(v => v.Fotos)
.SingleOrDefault(v => v.Id == id);
if (vehicleModels == null)
{
return HttpNotFound();
}
return View(vehicleModels);
}
// POST: VehicleModels/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int? id, IEnumerable<HttpPostedFileBase> uploads)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var VehicleToUpdate = db.VehicleModels.Find(id);
if (TryUpdateModel(VehicleToUpdate))
// my code here
return View(VehicleToUpdate);
}
如果您使用属性路由,GET 和 POST 操作将具有相同的路由属性。唯一可能不同的是如果你命名你的路由,在这种情况下,名称应该只出现在 GET 版本上。您不能将相同的名称应用于两条不同的路线,即使它们实际上是 相同 路线。