gpt4 book ai didi

c# - 了解 MVC 中的 [HttpPost]、[HttpGet] 和 Complex Actionmethod 参数

转载 作者:可可西里 更新时间:2023-11-01 08:20:00 25 4
gpt4 key购买 nike

我对 MVC 设计模式和框架非常陌生。我也不太精通 ASP.NET Forms 的基础知识。但是,我确实了解 Web 开发以及 HTTP Post 和 GET 的基础知识。

现在,我学习了一些 MVC 教程,虽然我已经很好地掌握了 MVC 模式的工作原理以及“路由引擎”的工作原理。然后突然我遇到了一个看起来像下面的代码:

public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}

[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content("Thanks", "text/html");
}
}

我有几个问题:

  • 我对路由引擎的理解是,控制被传递给基于 URL 的特定 ActionMethod,通常 URL 基本上是 Controller/ActionMethod/Id 类型,其中 action menthod 的参数是相当原始的类型。在上面的这个例子中,需要什么样的 URL 才能调用“

public ActionResult Index(MyViewModel model)?"

由于 NyViewModel 是一个复杂类型,您不能将其作为 URL 的一部分传递。你怎么调用它?

  • 当第一个方法不需要任何属性时,为什么第二个方法用 [HttpPost] 修饰?是否有关于何时使用 [Http] 属性以及何时不使用的指南?

我想我在这个谜题中遗漏了一个大问题,这两个问题是相互关联的。但是,需要一些帮助来理解这种关系

最佳答案

[HttpPost] 属性告诉路由引擎将发送到该操作方法的任何 POST 请求发送到一个方法而不是另一个方法。这是一种重载。

Why is this second method adorned with [HttpPost] when the first method does not require any attributes?

默认方法是[HttpGet]。因此,不需要任何属性。

Are there any guidelines on when to use [Http] attributes and when not?

理想情况下,属性应该在每个方法上,以避免混淆。随着您对事情的运作方式越来越熟悉,您通常会走捷径(就像其他事情一样),并在知道没有必要时省略它们。

Since MyViewModel is a complex type, you can not pass it as part of URL. How can you call it?

数据将从请求正文中的数据转换为模型。这可以作为 JSON 对象或表单数据出现。 (有一些技巧可以从 URL 初始化对象,但它们可能有点复杂和高级。)

关于c# - 了解 MVC 中的 [HttpPost]、[HttpGet] 和 Complex Actionmethod 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com