从我的API获取访问令牌后,我调用此方法:
[Authorize]
[HttpPost]
public HttpResponseMessage BatchGeocode([FromBody] InputDataClass inputData)
{
//do stuff, return a HttpResponseMessage
}
我可以使用Postman发出请求并获得预期的响应,如下所示:
我试图在使用RestSharp的应用程序中调用相同的API方法,使用与上面相同的url和输入数据:
var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + accessToken);
request.Parameters.Clear();
request.AddParameter("application/json", JsonConvert.SerializeObject(apiInput), ParameterType.RequestBody);
其中apiInput
是我的对象,与API输入参数匹配 - 当使用JsonConvert.SerializeObject()
序列化时,我得到的字符串与通过Postman在我的API请求正文中使用的字符串相同。
当这运行我收到的消息是“此请求已拒绝授权”。我在本地运行的API的断点没有被击中,这使我相信我没有在调用应用程序中正确构造我的请求。使用RestSharp,如何使用oAuth2 Bearer令牌对ASP.NET Web API执行POST请求?
从粗略搜索看来,您可能需要使用ParameterType
值调用重载。
request.AddParameter("Authorization", "Bearer " + accessToken, ParameterType.HttpHeader);
话虽如此,似乎RestSharp希望您使用不同的方法来执行身份验证(source),但这超出了我对RestSharp的了解范围。