asp.net - 使用 BeginForm 将表单数据发送到 ASP.NET MVC API Controller

标签 asp.net asp.net-mvc asp.net-web-api

基本上,我有一个具有以下方法的 API Controller :

public void Post([FromBody] string value)
{
   Repository.Save(value);
}

我像这样构造我的表单:

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "Post", Url = "/api/MyController"}))
{
   <input type="text" name="value" value="" />
   <input type="submit" value="Post" />
}

请求被路由到 Controller ,但由于某种原因始终为空。我尝试过使用和不使用 [FromBody] 属性。

可以显然将查询字符串参数附加到URL,但我真的想弄清楚如何使用简单类型发布表单数据(而不是创建我自己的 DTO 类型)。

谢谢!

最佳答案

默认情况下,Web API 尝试从请求 URI 获取简单类型。 FromBody 属性告诉 Web API 从请求正文中读取值。

Web API 最多读取一次响应正文,因此一个操作只能有一个参数来自请求正文。如果您需要从请求正文中获取多个值,请定义复杂类型。

其次,客户端需要发送以下格式的值:

=值

而不是这样:

值=foo

因此,如果您像这样发布数据 $.post('/api/myapicontroller', { "": $('#myinput').val() }); 它应该工作得很好,如果您想发送简单类型的数组,只需发送这样的数据 $.post('/api/myapicontroller', { "": ["update one", "update Two", “更新三”] });

如果您使用 Fiddler,只需将 =John+Smith 添加到请求正文,并确保您具有正确的内容类型,如下所示:Content-Type: application/x-www-form -urlencoded

关于asp.net - 使用 BeginForm 将表单数据发送到 ASP.NET MVC API Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876694/

相关文章:

c# - 如何从具有复杂键的 FormCollection 构建 C# 对象

c# - MVC 5 异步任务<ActionResult> 索引 View 的单元测试

asp.net-mvc - 如何在ASP.NET MVC Web API的URL末尾将电子邮件作为参数传递?

c# - 如何从 View 页面中的/controller/action/id 获取 id?

c# - 在 Asp.net session 中存储大量数据

.net - 如何抓取网站,客户端或服务器端?

html - 如何在主页菜单中突出显示事件页面?

c# - jquery ajax 调用 .NET Web api 返回错误

c# - ASP.NET HTTPClient 获取等待激活的请求状态

asp.net - asp.net MVC3 中的错误处理