Asp.Net Core 1.1 消费web api

Posted

技术标签:

【中文标题】Asp.Net Core 1.1 消费web api【英文标题】:Asp.Net Core 1.1 consume web api 【发布时间】:2017-10-11 11:56:03 【问题描述】:

我正在使用带有 VisualStudio 2017 社区的 asp.net core 1.1 开发一个 Web 应用程序,在这个应用程序中我使用一个 web-api 服务:

public static T SendPostRequest<T>(string pController, T pParam)
    using (HttpClient client = new HttpClient())
    string uri = API_URL + pController;
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var jsonInString = JsonConvert.SerializeObject((T)pParam);
    var content = new StringContent(jsonInString, Encoding.UTF8, "application/json");
    var result = client.PostAsync(uri, content).Result;
    return JsonConvert.DeserializeObject<T>(result.Content.ReadAsStringAsync().Result);

当此代码到达 api 控制器时,我的对象为空,但 jsonInString 具有我的对象的值。 当我使用 PostMan,使用 raw 和 JSON(applications/json),如果你看到我的对象的属性是空值,同样的错误通过了

但是,如果我使用带有表单数据的邮递员,在我的 apicontroller 中我接收对象的数据属性,我需要你的帮助,当我从我的 asp.net 核心网络中的代码发送时,我如何接收我的对象的值,希望对你有所帮助

【问题讨论】:

更改FromForm -> FromBody 是的!只需将 FromForm 更改为 FromBody 【参考方案1】:

为了能够正确处理,到达 web 控制器 api net.core 1.1 的数据,我建议您使用我在下面指示的内容。

控制器方法

    [Route("GetAll")]
    [HttpPost]
     ...here your security directives
       **example**
    [AllowAnonymous]
     public JsonResult GetAll([FromBody]MupdateDto data)
    
       try
        
          List<MupdateDto > result = Service.GetAll(data);       

            return Json(response);
        
        catch (Exception ex)
        

            response.GenerateResponse(TransData.ResponseKo(ex.Message, -69), null, null);
            throw;
        


    

可以看出,集合中标明了调用路径[Route("GetAll")]和要接收的参数类型[FromBody] . 示例结构

  public class MupdateDto


    /// <summary>
    /// data
    /// </summary>
    public string data get; set; 

    /// <summary>
    /// Update
    /// </summary>
    public DateTime Update  get; set; 

    /// <summary>
    /// Lparam
    /// </summary>
    public long  Lparam  get; set; 



现在您的服务器已启动,请根据以下注意事项拨打邮递员的电话

-选择方法装饰中标注的类型

-现在是准备数据的时候了,而不是像上面指出的那样将它们作为类型传递,我建议你将它们作为 RAW 传递,如下所示

你能确定我发送的数据类型是 JSON 错误吗

还有一件事,请记住,RAW 中填写的数据是模型在服务器上等待的类型,如果您有一个 long 类型的属性并且该 RAW 属性中填写的值是字符串,它的对象就会达到null。

希望您对我的解释正确,这将对您有所帮助。 问候

【讨论】:

以上是关于Asp.Net Core 1.1 消费web api的主要内容,如果未能解决你的问题,请参考以下文章

将 asp.net core web api 部署到 IIS 7.5 时出现 500 错误

ASP.NET Core Web Api配置Azure Key Vault

ASP.NET Core Web 应用程序作为 Azure 服务总线使用者/接收器

ASP.NET Core Web API下事件驱动型架构的实现:一个简单的实现

从托管在 Azure 中的 Asp.net Core MVC Web App 获取“响应状态代码不表示成功:502(错误网关)”

ASP.NET Core 1.1 获取所有用户及其角色