【问题标题】:.NetCore 3.1 Webapi not post string in action.Net Core 3.1 Web Api 未在操作中发布字符串
【发布时间】:2020-11-01 06:04:34
【问题描述】:

我将 webapi 解决方案从 2.1 升级到 3.1。

我的 Startup.cs 文件包含:

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers();
   services.AddMvc().AddNewtonsoftJson();
..

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   if (env.IsDevelopment())
   {
       app.UseDeveloperExceptionPage();
   }

   app.UseRouting();
   app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
..

我的控制器开始于:

[ApiController]
[Route("api/[controller]/[action]")]
public class MyFooController : Controller

这是我的行动:

[HttpPost]
public string MyFooAction(string value)

所以我从另一个简单的解决方案中调用操作:

var param = new NameValueCollection();
param["value"] = "3";
using (var client = new WebClient())
{
    var data = client.UploadValues(url, "POST", param);

在调试中,调用获取操作路由,但 value=null 始终。 我也试过 [FromBody],但它是一样的。

我在 3.1 中阅读会更喜欢从 ControllerBase 类继承控制器,但我有许多返回 Json(obj) 的操作,并且在 ControllerBase 类中不存在,而仅在 Contreller 类中存在:这是问题吗?

提前致谢。

【问题讨论】:

  • 嗨@CodeIT,关于这个案例的任何更新?您使用我分享的解决方案解决了问题吗?
  • 嗨飞,对不起……不练习……我现在做得好吗?

标签: asp.net-core .net-core asp.net-core-webapi


【解决方案1】:

var data = client.UploadValues(url, "POST", param);

调用获取操作路径,但 value=null 始终

使用WebClient.UploadValues 方法将值发布到服务器,您可以尝试将[FromForm] 属性应用于您的操作参数,如下所示。

[HttpPost]
public string MyFooAction([FromForm]string value)
{

    //...

测试结果

此外,您可以使用WebClient.UploadString 方法通过请求正文发布数据来实现相同的要求。

using (var client = new WebClient())
{
    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
    var data = client.UploadString(url, "POST", "3");
    //...
}

动作方法

[HttpPost]
public string MyFooAction([FromBody]string value)
{

    //...

测试结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多