【发布时间】:2016-10-04 15:15:00
【问题描述】:
我们创建了 Web 服务,可以发布一些数据,修改它并以 json 格式发回。入口方法有 System.Web.Http.HttpPost 属性
[HttpPost]
public object Index(dynamic input)
{
// return modified data;
}
它工作正常,但我们想做一些自动测试。为了使它成为可能,我们在 azure 上发布了网站。但是,为了限制访问 Azure Active 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: 'Method Not Allowed' "{\"Message\":\"请求的资源不支持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();}
【问题讨论】:
标签: asp.net rest azure active-directory