【发布时间】:2018-02-05 08:41:21
【问题描述】:
这可能是一个重复的问题,但我仍然找不到任何可以解决我的问题的答案,所以再次发布。
我有一个 azure worker 角色,并且我使用 Owin selfhost 向它添加了一个 ApiController(请参阅 this 以供参考)。
在我的自定义控制器中,我有一个 POST api,它尝试通过从 Request 对象中提取证书来进行客户端证书身份验证,但是在部署到 azure cemulator 时,证书始终为 null。
这是我的示例客户端代码:
enter code here
公共静态异步任务 GetResponseAsync(WebApiRequestInfo webApiRequestInfo)
{
if (webApiRequestInfo == null)
{
throw new ArgumentNullException("webApiRequestInfo");
}
WebRequestHandler requestHandler = null;
if (webApiRequestInfo.Certificate != null)
{
requestHandler = new WebRequestHandler { ClientCertificateOptions = ClientCertificateOption.Manual };
requestHandler.ClientCertificates.Add(webApiRequestInfo.Certificate);
}
using (var client = requestHandler != null
? new HttpClient(requestHandler) {BaseAddress = webApiRequestInfo.BaseUrl}
: new HttpClient {BaseAddress = webApiRequestInfo.BaseUrl})
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(webApiRequestInfo.MediaType));
var method = new HttpMethod(webApiRequestInfo.HttpMethod);
var request = new HttpRequestMessage(method, webApiRequestInfo.RelativeUrl)
{
Content =
webApiRequestInfo.Content != null
? new StringContent(JsonConvert.SerializeObject(webApiRequestInfo.Content), Encoding.UTF8,
"application/json")
: null
};
var response = await client.SendAsync(request);
return response;
控制器代码如下所示:
[HttpPost]
public async Task<HttpResponseMessage> GetPackage([FromBody]PackageInfo packageInfo)
{
string correlationId = null;
var logger = TraceLogger<LogData>.Logger;
try
{
if (string.IsNullOrEmpty(packageInfo.Partner))
{
throw new ArgumentException("Partner undefined");
}
if (string.IsNullOrEmpty(packageInfo.ServiceEnvironment))
{
throw new ArgumentException("ServiceEnvironment undefined");
}
if (string.IsNullOrEmpty(packageInfo.StorageEnvironment))
{
throw new ArgumentException("StorageEnvironment undefined");
}
var cert1 = Request.GetClientCertificate();// this is always null
}
我是否缺少某些东西,或者这是为 azure 模拟器设计的东西。我想在部署到云服务之前澄清这一点,以确保这里没有遗漏任何东西。任何解决此问题的建议都会非常有帮助。
【问题讨论】:
-
请查看
webApiRequestInfo.BaseUrl,是http还是https?
标签: c# azure azure-worker-roles client-certificates asp.net-apicontroller