Asp.net 核心 FromBody 总是得到 NULL

Asp.net core FromBody always getting NULL

朋友们您好,我已经创建了 Asp.net 核心 Web 服务并从 Web 应用程序调用此 Web 服务。在此网站中 api 用户上传 pdf 和文档类型和文件编号。 这是我的 asp.net 核心控制器

[HttpPost ]
[Route("v1/ReceiveNoteData")]
public string   ReceiveNoteData([FromBody] ReceiveNoteDataReq request)
{
   return _IReceiveNoteData.ReceiveNoteDataResponse(request);        
}

ReceiveNoteDataReq class

public class ReceiveNoteDataReq
{
    public byte[] DocumentBody { get; set; }
    public string DocType { get; set; }
    public string FileNumber { get; set; }
}

当我尝试在服务端使用 webrequest 从 body 调用此 Web 服务时,总是得到 NULL 如果我只发送文件编号和文档类型,我正在从正文中获取数据,但是当我尝试从正文中发送 pdf 数据时,结果为 NULL。

这就是我在 Web 应用程序中调用 Web 服务的方式。

ReceiveNoteDataReq req = new ReceiveNoteDataReq()
req.DocumentBody = bytes;// pdf byte data 
req.FileNumber = txtid.Text;
req.DocType = doctype;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
string url = "http://localhost:905/v1/ReceiveNoteData";
CookieContainer cookieJar = new CookieContainer();

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/json";
webRequest.MediaType = "application/json";
webRequest.Accept = "application/json";
webRequest.CookieContainer = cookieJar;
webRequest.KeepAlive = true;
webRequest.UserAgent = @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36";

webRequest.Credentials = CredentialCache.DefaultCredentials;
StreamWriter writer = new StreamWriter(webRequest.GetRequestStream());
JavaScriptSerializer jss = new JavaScriptSerializer();
string yourdata = jss.Serialize(req); // here i am converting class to json string.
writer.Write(yourdata);
writer.Close();


var myWebResponse = webRequest.GetResponse();
var responseStream = myWebResponse.GetResponseStream();
if (responseStream != null)
{
   var myStreamReader = new StreamReader(responseStream, Encoding.Default);
   result = myStreamReader.ReadToEnd();
}

提前致谢。

when i am trying to call this web service using webrequest on service side frombody always getting NULL if i am sending only file number and doc type i am getting data in from body but when i am trying to send pdf data from body getting NULL.

如果你想post从请求体到你的后端服务的pdf数据和其他信息,你可以参考下面的例子。

//...

string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
string yourdata = System.Text.Json.JsonSerializer.Serialize(
    new
    {
        DocType = doctype,
        FileNumber = txtid.Text,
        DocumentBody = base64String
    });

writer.Write(yourdata);
writer.Close();

//...

ByteArrayModelBinder 可以帮助将数据绑定到 byte[] DocumentBody 属性 很好。

public class ReceiveNoteDataReq
{
    [ModelBinder(BinderType = typeof(ByteArrayModelBinder))]
    public byte[] DocumentBody { get; set; }
    public string DocType { get; set; }
    public string FileNumber { get; set; }
}

测试结果

另外,@SabirHossain 提到过,你可以尝试修改你的代码,通过FormData上传文件,讨论过类似的需求,你可以参考。