You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minimal API发送JSON对象的Get请求失败,返回MethodNotAllowed

解决RestSharp调用Minimal API返回MethodNotAllowed的问题

我用PostMan生成的RestSharp代码调用自己的Minimal API,PostMan直接发送请求能得到预期结果,但执行代码时返回“MethodNotAllowed”。相关代码如下:

客户端代码

var options = new RestClientOptions
{
    MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("https://api.votingcrowd.co.za/User/Details", Method.Get);
request.AddHeader("Content-Type", "application/json");
var body = "....";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

API端代码

app.MapGet(RESTRoutes.UserDetails, ([FromBody] Credentials CredentialObject) => VoteAPI.User.GetUsers(CredentialObject));

问题原因

  1. HTTP规范冲突:GET请求的设计初衷是获取资源,通常不携带请求体,ASP.NET Core Minimal API对GET请求绑定[FromBody]参数的支持有限,会直接拒绝这类请求。
  2. 请求格式不兼容:RestSharp发送带JSON请求体的GET请求,这种不符合常规规范的请求会被服务器判定为无效,返回405 Method Not Allowed。

解决方案

方案一:改用POST请求(推荐)

传递结构化参数时,POST请求更符合REST规范,也能完美适配请求体参数绑定。

修改API端代码

将MapGet替换为MapPost,保留[FromBody]参数绑定:

app.MapPost(RESTRoutes.UserDetails, ([FromBody] Credentials CredentialObject) => VoteAPI.User.GetUsers(CredentialObject));
修改客户端代码

将请求方法改为Method.Post,其余逻辑不变:

var options = new RestClientOptions
{
    MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("https://api.votingcrowd.co.za/User/Details", Method.Post);
request.AddHeader("Content-Type", "application/json");
var body = "....";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

方案二:改用GET请求传递Query参数(仅适用于简单参数)

如果必须使用GET请求,需将参数放到URL的QueryString中,而非请求体。

修改API端代码

移除[FromBody],改用[FromQuery]绑定参数:

app.MapGet(RESTRoutes.UserDetails, ([FromQuery] Credentials CredentialObject) => VoteAPI.User.GetUsers(CredentialObject));
修改客户端代码

删除请求体相关代码,改用AddQueryParameter添加参数:

var options = new RestClientOptions
{
    MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("https://api.votingcrowd.co.za/User/Details", Method.Get);
// 替换为你的实际参数键值对
request.AddQueryParameter("Username", "your_username");
request.AddQueryParameter("Password", "your_password");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

内容的提问来源于stack exchange,提问作者Systellence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:30:08