C# Asp.NETCore1.1使用web api

C# Asp.NETCore1.1使用web api,c#,asp.net-web-api,asp.net-mvc-5,asp.net-core,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Mvc 5,Asp.net Core,Asp.net Web Api2,我正在使用asp.net core 1.1和VisualStudio 2017社区开发一个web应用程序,在此应用程序中,我使用以下web api服务: public static T SendPostRequest<T>(string pController, T pParam){ using (HttpClient client = new HttpClient()){ string uri = API_URL + pController; client.

我正在使用asp.net core 1.1和VisualStudio 2017社区开发一个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);
}
publicstatict SendPostRequest(字符串pController,tparam){
使用(HttpClient=new HttpClient()){
字符串uri=API_URL+pController;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var jsonInString=JsonConvert.SerializeObject((T)pParam);
var content=newstringcontent(jsonInString,Encoding.UTF8,“application/json”);
var result=client.PostAsync(uri,content.result);
返回JsonConvert.DeserializeObject(result.Content.ReadAsStringAsync().result);
}
}

当此代码到达api控制器时,我的对象为null,但jsonInString具有我的对象的值。 如果您看到我的对象的属性为null,那么当我使用PostMan、使用raw和JSON(applications/JSON)时也会出现相同的错误

但是,如果我使用postman处理表单数据,在我的apicontroller中,我接收对象的数据属性,我需要您的帮助,当我从asp.net核心web中的代码发送时,如何接收对象的值,我希望您的帮助


为了能够正确处理到达web Controller 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”)]
[HttpPost]
…这是你的安全指令
**范例**
[异名]
public JsonResult GetAll([FromBody]MupdateDto data)
{
尝试
{
列表结果=Service.GetAll(数据);
返回Json(响应);
}
捕获(例外情况除外)
{
response.generatereresponse(TransData.ResponseKo(例如-69),null,null);
投掷;
}
}
可以看出,在集合中,指示了调用路径[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; }


}
公共类MupdateDto
{
/// 
///资料
/// 
公共字符串数据{get;set;}
/// 
///更新
/// 
公共日期时间更新{get;set;}
/// 
///Lparam
/// 
公共长Lparam{get;set;}
}
现在,在服务器启动的情况下,从邮递员处拨打电话时要考虑以下几点

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

-现在是准备数据的时候了,而不是像上面指出的那样以类型形式传递数据,我建议您以原始形式传递数据,如下所示

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

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

我希望你给我的解释是正确的,这将对你有所帮助。
问候语

为了能够正确处理到达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”)]
[HttpPost]
…这是你的安全指令
**范例**
[异名]
public JsonResult GetAll([FromBody]MupdateDto data)
{
尝试
{
列表结果=Service.GetAll(数据);
返回Json(响应);
}
捕获(例外情况除外)
{
response.generatereresponse(TransData.ResponseKo(例如-69),null,null);
投掷;
}
}
可以看出,在集合中,指示了调用路径[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; }


}
公共类MupdateDto
{
/// 
///资料
/// 
公共字符串数据{get;set;}
/// 
///更新
/// 
公共日期时间更新{get;set;}
/// 
///Lparam
/// 
公共长Lparam{get;set;}
}
现在,在服务器启动的情况下,从邮递员处拨打电话时要考虑以下几点

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

-现在是准备数据的时候了,而不是像上面指出的那样以类型形式传递数据,我建议您以原始形式传递数据,如下所示

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

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

我希望你给我的解释是正确的,这将对你有所帮助。
问候语

Change
FromForm
->
FromBody
是的!只需从Form更改为FromBody更改
FromForm
->
FromBody
是的!从形体到形体的转换