Post方法返回“在Azure上添加授权后,请求的资源不支持http方法'GET'。\”

时间:2016-10-04 15:15:01

标签: asp.net rest azure active-directory

我们已经创建了一个Web服务,它可以发布一些数据,修改它并以json格式发送回来。 entry方法具有System.Web.Http.HttpPost属性

    [HttpPost]
    public object Index(dynamic input)
    {
     // return modified data;
    }

它工作正常,但我们想做一些自动测试。为了使我们能够在azure上发布网站。但是,为了限制访问,Azure Service Directory身份验证是在服务上配置的。 代码没有变化。只有Web应用程序/ API应用程序在Active Directory中使用密钥注册。然后在服务身份验证/授权配置中添加了客户端。

从使用ADAL库的代码中获取访问令牌。使用它我可以成功调用get方法(服务还有另一个get条目,但具有不同的本地路径)

   HttpClient httpClient = new HttpClient();
   httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
   result.AccessTokenType, result.AccessToken);
   var uriString = @"http://myService.azurewebsites.net/api/MyGetMethod";
   Uri uri = new Uri(uriString);
   HttpResponseMessage httpResponse = await httpClient.GetAsync(uri);
   if (httpResponse.IsSuccessStatusCode)
   {
      return await httpResponse.Content.ReadAsStringAsync();
   }

但是当我尝试用post方法做同样的事情时,我得到了回应:

{StatusCode:405,ReasonPhrase:'方法不允许',消息在“{\”消息\“中:”\“请求的资源不支持http方法'GET'。 \ “}”

以下用于发布消息的代码:

  HttpClient httpClient = new HttpClient();
  httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(result.AccessTokenType, result.AccessToken);
  httpClient.DefaultRequestHeaders.Accept.Add(
  new MediaTypeWithQualityHeaderValue("application/json"));
  var stringContent = new StringContent("{MyData: 5.4}");
  stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
  var response = await httpClient.PostAsync("http://myService.azurewebsites.net/api/MyPostMethod", stringContent).Result;
  if (response.IsSuccessStatusCode) {
     return await response.Content.ReadAsStringAsync();}

1 个答案:

答案 0 :(得分:1)

根据说明,您已使用Azure广告保护了网络服务,并且您能够成功发送 GET 请求。

从错误消息中,问题与Web服务有关。以下示例适用于我:

// POST api/values
public void Post([FromBody]Message value)
{

}

public class Message
{
     public Double MyData;
}

如果问题仍然存在,您可以共享网络服务代码帮助以缩小此问题的范围。

更新

您上传的代码示例适用于我,无论是否使用Azure AD进行身份验证,请参阅下面的测试请求,看看它是否有用:

enter image description here

要将Web API与Azure AD集成,您还可以参考代码示例here