Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net core FromBody始终为空_C#_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# Asp.net core FromBody始终为空

C# Asp.net core FromBody始终为空,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,朋友们好,我创建了Asp.net核心web服务,并将此web服务称为web应用程序。在此web api中,用户上载pdf和文档类型以及文件编号。 这是我的asp.net核心控制器 [HttpPost ] [Route("v1/ReceiveNoteData")] public string ReceiveNoteData([FromBody] ReceiveNoteDataReq request) { return _IReceiveNoteData.Receive

朋友们好,我创建了Asp.net核心web服务,并将此web服务称为web应用程序。在此web api中,用户上载pdf和文档类型以及文件编号。 这是我的asp.net核心控制器

[HttpPost ]
[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 若我只发送文件号和文档类型,那个么我从body中获取数据,但当我试图从body发送pdf数据时,数据为空

这就是我在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();
}
提前谢谢

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

如果您想将带有其他信息的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();

//...
可以帮助将数据绑定到
字节[]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上载文件,并讨论了类似的要求,您可以参考它。

这可能是序列化问题吗?您能尝试序列化您的请求并查看它是否有效吗?添加了属性,但使用nullUse Fiddler检查您的负载。确保您发送的是您认为要发送的内容。为什么不使用
FormData
上载文件,或者您可以尝试将
public byte[]DocumentBody{get;set;}
更改为
public ifformfile DocumentBody{get;set;}
@SabirHossain您有任何代码示例吗?您是救世主感谢您宝贵的时间终于起作用了:)祝您愉快:)编码愉快:)