我有一个使用Web API的ASP.NET MVC 4项目.在控制器上,我已使用[Authorize]属性将类设置为需要授权.对于身份验证我使用ASP.NET成员资格提供程序并将我的Web.Config设置为使用"表单"身份验证.这是我被困的地方:
一切都工作得很好,直到我完成测试API的步骤,我想用[Authorize]属性保护控制器,这样我就可以开始对我的Membership Provider中的用户进行身份验证.所以我启动Fiddler并进行相同的调用,添加Authorization:Basic属性以及来自我的会员提供者的用户名:密码,如下所示:

我得到的响应是未经授权的401,在"Auth"下,我得到"没有WWW-Authenticate Header".然后我意识到API正在寻找SHA1编码密钥.所以我从搜索中启动一个SHA1生成器并获取我的用户名的密码:password并更新我的Request Header,如下所示:

这也不起作用,我得到相同的结果.此外,我显然需要某种"共享密钥"与服务器一起使用来解码我的用户名/密码.
所以我的问题:
提前致谢!
asp.net-mvc forms-authentication asp.net-membership fiddler asp.net-web-api
试图使用新的C#5异步模型,令我惊讶的AspNetSynchronizationContext是内部类(以及AspNetSynchronizationContextBase基础).因而无证.但是,在ASP.NET代码中使用async/await功能时,了解它的作用至关重要.我是否正确,它确实保证您的延续将与HttpContext.Current原始呼叫者相同?它不保证continuation将在与调用者相同的线程上执行吗?
如果后一个假设不正确并且我得到原始线程,我可以确保在continuation中获得相同的线程上下文吗?我的意思是与线程和线程本地存储相关的主体/文化?这很重要,因为ASP.NET本地化依赖于线程的文化,而我的应用程序依赖于.NET角色安全模型(线程的主体).
在ASP.NET 4.5 MVC 4 Web API项目中,我想添加一个自定义HttpMessageHandler.我已经更改了WebApiConfig类(在\ App_Satrt\WebApiConfig.cs中),如下所示:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new MyCustomizedHttpMessageHandler()
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我发展了MyCustomizedHttpMessageHandler:
public class MyCustomizedHttpMessageHandler : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
IPrincipal principal = new GenericPrincipal(
new GenericIdentity("myuser"), new string[] { "myrole" });
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
return Task<HttpResponseMessage>.Factory.StartNew(() => …Run Code Online (Sandbox Code Playgroud) .net ×1
asp.net ×1
asp.net-4.5 ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
c# ×1
c#-5.0 ×1
fiddler ×1