程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Asp.net 核心 FromBody 总是为 NULL大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Asp.net 核心 FromBody 总是为 NULL?

开发过程中遇到Asp.net 核心 FromBody 总是为 NULL的问题如何解决?下面主要结合日常开发的经验,给出你关于Asp.net 核心 FromBody 总是为 NULL的解决方法建议,希望对你解决Asp.net 核心 FromBody 总是为 NULL有所启发或帮助;

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

[@R_489_10107@Post ]
[Route("v1/ReceiveNoteData")]
public String   ReceiveNoteData([FromBody] ReceiveNoteDataReq request)
{
   return _IReceiveNoteData.ReceiveNoteDataResponse(request);        
}

ReceiveNoteDataReq 类

public class ReceiveNoteDataReq
{
    public byte[] documentBody { get; set; }
    public String DOCTYPE { get; set; }
    public String filenumber { get; set; }
}

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

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

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 = "@R_489_10107@://localhost:905/v1/ReceiveNoteData";
cookieContainer cookieJar = new cookieContainer();

@R_489_10107@Webrequest webrequest = (@R_489_10107@Webrequest)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();
}

提前致谢。

解决方法

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

如果您想将带有其他信息的 pdf 数据从请求正文发布到您的后端服务,您可以参以下示例。

//...

String base64String = Convert.ToBase64String(bytes,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; }
}

测试结果

Asp.net 核心 FromBody 总是为 NULL

另外,正如@SabirHossain 提到的,您可以尝试修改您的代码以通过FormData上传文件,并且this SO thread讨论了类似的要求,您可以参

大佬总结

以上是大佬教程为你收集整理的Asp.net 核心 FromBody 总是为 NULL全部内容,希望文章能够帮你解决Asp.net 核心 FromBody 总是为 NULL所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:核心