我可以使用.NET的HttpClient来访问Azure移动服务吗?
如何使用HttpClient在custom Authentication/Authorization patterns中使用移动服务进行身份验证?
这总是返回401,因为我没有传递任何身份验证凭据:
var client = new HttpClient();
var response = client.GetAsync("http://localhost:49190/api/test").Result;
此外,为什么我使用Mobile Service Client,为什么我的应用程序密钥,主密钥或用户身份验证密钥总是返回(401)未授权?
客户端:
var mobileClient = new MobileServiceClient("http://localhost:49190/", "[my key]");
var response = mobileClient.InvokeApiAsync("test").Result;
服务方:
[AuthorizeLevel(AuthorizationLevel.Application)]
public class TestController : ApiController
{
public ApiServices Services { get; set; }
// GET api/Test
public string Get()
{
Services.Log.Info("Hello from custom controller!");
return "Hello";
}
}
答案 0 :(得分:12)
“我可以使用.NET的HttpClient来命中Azure Mobile服务吗?”简短的回答是肯定的。简单的方法是将其添加到客户端的标题中:
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-ZUMO-APPLICATION", "[my key]");
但请注意,如果您使用的是本地托管版本,则需要确保自己...
强制服务认为它是托管的,以便启用身份验证。
(在App_Start / WebApiConfig.cs中:config.SetIsHosted(true);
将应用程序密钥和主密钥添加到web.config:
<appSettings>
<add key="MS_MasterKey" value="[your master key]" />
<add key="MS_ApplicationKey" value="[your app key]" />
</appSettings>
如果没有#1,整个服务的身份验证将被完全忽略,因此您不知道您在客户端中添加身份验证的方式是否正常。如果没有#2,您可以将密钥添加到客户端(您从Azure获得),但它总是返回401.这可能是发布的关于使用MobileServiceClient
总是返回的第二个问题的答案401.
最后,您可以使用三种不同的标题。您可以使用每个不同级别的授权。从MSDN doc:
开始作者注意:我个人很难让这个工作,并且对于这种特定风格的文档有限或缺少,我想写这个Q / A.如果您认为我应该添加任何东西,请告诉我。