我们已经创建了一个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();}
答案 0 :(得分:1)
根据说明,您已使用Azure广告保护了网络服务,并且您能够成功发送 GET 请求。
从错误消息中,问题与Web服务有关。以下示例适用于我:
// POST api/values
public void Post([FromBody]Message value)
{
}
public class Message
{
public Double MyData;
}
如果问题仍然存在,您可以共享网络服务代码帮助以缩小此问题的范围。
您上传的代码示例适用于我,无论是否使用Azure AD进行身份验证,请参阅下面的测试请求,看看它是否有用:
要将Web API与Azure AD集成,您还可以参考代码示例here。