gpt4 book ai didi

asp.net-mvc-4 - MVC 4 Web API 中的默认参数值

转载 作者:行者123 更新时间:2023-12-04 19:15:25 24 4
gpt4 key购买 nike

我很好奇为什么 ApiController 处理 Action 的默认参数值与“常规” Controller 不同。

这段代码工作得很好,请求/Test 意味着页面获取值 1

public class TestController : Controller
{
public ActionResult Index(int page = 1)
{
return View(page);
}
}

当向/api/Values 发出请求时,此代码不起作用。它失败了:

“参数字典包含不可为空类型‘System.Int32’的参数‘页面’的空条目,用于‘MvcApplication1.Controllers’中的方法‘System.Collections.Generic.IEnumerable`1[System.String] Get(Int32)’ .Controllers.ValuesController'。可选参数必须是引用类型、可空类型或声明为可选参数。”
public class ValuesController : ApiController
{
public IEnumerable<string> Get(int page = 1)
{
return new string[] { page.ToString() };
}
}

关于为什么会这样的任何提示?

最佳答案

尝试添加 [FromUri] 或 [FromForm] 参数属性。

public class ValuesController : ApiController
{
public IEnumerable<string> Get([FromUri]int page = 1)
{
return new string[] { page.ToString() };
}
}

Mike Stall 有两篇关于 Webapi 中参数绑定(bind)的好文章,它不像在 ASP MVC 中那样工作。要习惯的一个大问题是您只能在管道中读取一次请求正文。因此,如果您需要读取 1 个以上的复杂对象作为参数,您可能需要通过参数求助于 ModelBinding。当我在管道中读取内容正文以进行日志记录时,我遇到了与您类似的问题,并且没有意识到上面的一次读取限制并且必须使用我自己的自定义模型绑定(bind)器来解决。

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx 解释模型绑定(bind)然后提出一种使 WebAPI 模型绑定(bind)更像 ASP MVC http://blogs.msdn.com/b/jmstall/archive/2012/04/18/mvc-style-parameter-binding-for-webapi.aspx 的方法

关于asp.net-mvc-4 - MVC 4 Web API 中的默认参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233637/

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