asp.net 为什么我得到“方法不允许”405异常,而尝试后请求?

yks3o0rb  于 2023-01-27  发布在  .NET
关注(0)|答案(1)|浏览(180)

在我的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;
    }
tkclm6bt

tkclm6bt1#

我已经解决了我自己的问题。我传递了与预期不同的数据类型给PostAsJsonAsync()。所以我只是传递了发票模型,而没有显式地将其转换为JSON,它工作了。

相关问题