在我的C#解决方案中,我正在将Invoice模型从MVC项目发送到API项目。但是由于某种原因,我一直收到异常405 -“方法不允许”。我尝试修改web.configs,在program.cs中启用cors,向控制器端点添加不同的属性,但这些都不起作用。当我尝试用 Postman 将请求发送到https://localhost:7175/api/Invoice时,它起作用,但当我通过MVC控制器方法访问它时,它不起作用。
下面是我正在访问的API端点(成功状态代码始终为false):
public async Task<FileStreamResult> Download(Invoice? invoice)
{
string apiUrl = "https://localhost:7175/api/Invoice/Post";
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(invoice.ToString(), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsJsonAsync(apiUrl, content);
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
var data = await response.Content.ReadAsStringAsync();
var table = Newtonsoft.Json.JsonConvert.DeserializeObject<System.Data.DataTable>(data);
}
}
MemoryStream stream = genPdf.GeneratePdf(invoice);
return File(stream, mimeType, fileName);
}
下面是来自API项目的控制器端点(当使用postman时,我只在这里接收发票模型):
[HttpPost]
public MemoryStream Post([FromBody] Invoice invoice)
{
MemoryStream stream = genPdf.GeneratePdf(invoice);
return stream;
}
1条答案
按热度按时间tkclm6bt1#
我已经解决了我自己的问题。我传递了与预期不同的数据类型给
PostAsJsonAsync()
。所以我只是传递了发票模型,而没有显式地将其转换为JSON,它工作了。