Sou*_*osh 26 c# asp.net-core-webapi asp.net-core-2.0
我面临一个奇怪的问题,几乎花了4个小时没有运气.
我有一个简单的Web API,我在表单提交上调用.
API -
// POST: api/Tool
[HttpPost]
public void Post([FromBody] Object value)
{
_toolService.CreateToolDetail(Convert.ToString(value));
}
Run Code Online (Sandbox Code Playgroud)
HTML的
<!DOCTYPE html>
<html>
<body>
<h2>HTML Forms</h2>
<form name="value" action="https://localhost:44352/api/tool" method="post">
First name:<br>
<input type="text" id="PropertyA" name="PropertyA" value="Some value A">
<br>
Last name:<br>
<input type="text" id="PropertyB" name="PropertyB" value="Some value B">
<br><br>
<!--<input type="file" id="Files" name="Files" multiple="multiple"/>-->
<br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我点击提交按钮时,我得到以下错误 -
{"":["The input was not valid."]}
Run Code Online (Sandbox Code Playgroud)
启动课程中的配置 -
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<IConfiguration>(Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
这仅适用于POST请求.GET请求正常.在Postman REST客户端中进行测试时出现同样的问题 有什么帮助吗?如果我能提供更多详细信息,请通知我.
Chr*_*att 33
不要用FromBody.您正在提交x-www-form-urlencoded(即标准HTML表单帖子).该FromBody属性适用于JSON/XML.
您无法同时处理标准表单提交和 JSON/XML请求正文.如果您需要双向请求操作,则需要两个单独的端点,一个使用param装饰,FromBody另一个不使用.没有其他办法.您的操作的实际功能可以分解为两个操作都可以使用的私有方法,以减少代码重复.
Ada*_*mph 12
我刚刚在这里遇到了类似的情况; 我能够毫无问题地使用[FromBody]:
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> SomeEndpoint([FromBody]Payload inPayload)
{
...
}
}
public class Payload
{
public string SomeString { get; set; }
public int SomeInt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我发现的挑战是确保使用Content-Type标头设置为"application/json"来进行请求.使用Postman我的原始请求被返回为"输入无效".添加Content-Type标头为我解决了问题.
只需更改[FromBody]为即可[FromForm]。
该FromForm属性用于按内容类型发送的提交表单中的传入数据,application/x-www-url-formencoded而FromBody会以默认方式解析模型,默认方式是application/json从请求正文按内容类型发送。
感谢/sf/answers/3531790181/
| 归档时间: |
|
| 查看次数: |
33818 次 |
| 最近记录: |