相关疑难解决方法(0)

使用成员资格提供程序的ASP.NET MVC 4 Web API身份验证

我有一个使用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,如下所示:

在此输入图像描述

这也不起作用,我得到相同的结果.此外,我显然需要某种"共享密​​钥"与服务器一起使用来解码我的用户名/密码.

所以我的问题:

  1. 如何从服务器获取此密钥(或者在这种情况下,虚拟IIS运行VS 2012).
  2. 如何使用它来使用ASP.NET成员资格提供程序中的用户名/密码在Fiddler中进行Authenticated调用.
  3. 如何在我的客户端应用程序中使用它来进行相同的调用(C#WPF应用程序).
  4. 在我的HTTP调用中与SSL结合使用时,这是最好的吗?如果不是什么?

提前致谢!

asp.net-mvc forms-authentication asp.net-membership fiddler asp.net-web-api

43
推荐指数
1
解决办法
4万
查看次数

AspNetSynchronizationContext

试图使用新的C#5异步模型,令我惊讶的AspNetSynchronizationContext是内部类(以及AspNetSynchronizationContextBase基础).因而无证.但是,在ASP.NET代码中使用async/await功能时,了解它的作用至关重要.我是否正确,它确实保证您的延续将与HttpContext.Current原始呼叫者相同?它保证continuation将在与调用者相同的线程上执行吗?

如果后一个假设不正确并且我得到原始线程,我可以确保在continuation中获得相同的线程上下文吗?我的意思是与线程和线程本地存储相关的主体/文化?这很重要,因为ASP.NET本地化依赖于线程的文化,而我的应用程序依赖于.NET角色安全模型(线程的主体).

.net asp.net asynchronous async-await c#-5.0

22
推荐指数
2
解决办法
4253
查看次数

如何在Web API中实现HttpMessageHandler?

在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)

c# asp.net-mvc-4 asp.net-4.5 asp.net-web-api

16
推荐指数
2
解决办法
3万
查看次数