![](/img/trans.png)
[英]Issue while binding the POSTed complex form data from Angular JS to ASP.Net Web API 2
[英]ASP.NET Web API does not receive the data posted from Angular
我目前正在尝试将角度模型发布到 .NET Core MVC 中的 Web API。 Angular 侧的模型在 Posts to the web API 点之前正确填充。 然而,当它到达 API 时,模型看起来像{"urlEndpoint":null,"token":null}
。
我尝试更改标头Content-Type
,我尝试添加[FromBody]
,我还尝试将控制器从HttpResponseMessage
更改为IHttpActionResult
- 实际上几乎所有关于堆栈溢出的解决方案都适用于类似问题。 然而,有趣的是,同样的代码在标准 .NET 上的旧项目中也能工作。
对此的任何帮助将不胜感激......这让我发疯!
角度组件:
getPdfData() {
let token = this.httpService.getToken("token");
this.urlAndTokenModel = new UrlAndTokenModel();
this.urlAndTokenModel.Token = token;
this.urlAndTokenModel.UrlEndpoint = this.apiEndpoint;
this.httpService.postPdfBytes('/blahblah/api/pleaseworkthistime', this.urlAndTokenModel, this.successCallback.bind(this),
this.failureCallback.bind(this));
}
角 http.service
postPdfBytes(url: string, data: UrlAndTokenModel, successCallback, errorCallback) {
return this.http.post(url, data,
{
headers: new HttpHeaders().set('Content-Type', 'application/json'),
responseType: 'blob'
}
).subscribe(
resp => successCallback(resp),
error => errorCallback(error)
);
}
网络API:
public class TestController : BaseController
{
public TestController(ICacheHelper cacheHelper) :
base(cacheHelper)
{
}
[Route("api/pleaseworkthistime")]
[HttpPost]
public HttpResponseMessage GetDocument(UrlAndTokenModel data)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", data.Token);
var responseTask = client.GetAsync(data.UrlEndpoint);
responseTask.Wait();
var result = responseTask.Result;
byte[] finalResult = null;
if (result.IsSuccessStatusCode)
{
var readTask = result.Content.ReadAsByteArrayAsync();
readTask.Wait();
finalResult = readTask.Result;
}
var httpRequestMessage = new HttpRequestMessage();
var httpResponseMessage = httpRequestMessage.CreateResponse(HttpStatusCode.OK);
httpResponseMessage.Content = new ByteArrayContent(finalResult);
httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
httpResponseMessage.Content.Headers.ContentDisposition.FileName = "mytestpdf.pdf";
httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
return httpResponseMessage;
}
}
然后显然有带有URLEndpoint
和令牌的角度URLAndTokenModel
- C# 模型中也有相同的镜像。
终于解决了! 我希望这可以帮助其他人遇到同样的问题。
当它发布到 .NET API 时,它首先需要是 JSON.Stringify
this.httpService.postPdfBytes('/blahblah/api/pleaseworkthistime', JSON.stringify(this.urlAndTokenModel), this.successCallback.bind(this),
this.failureCallback.bind(this));
因此,角度 http.service 也需要更新为字符串而不是模型。
postPdfBytes(url: string, data: string, successCallback, errorCallback)
此时它仍然没有它,然后简单地将 [FromBody] 添加到 Controller 和 walahh!
public HttpResponseMessage GetDocument([FromBody] UrlAndTokenModel data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.