Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法获取要调用的自定义ASP MVC 4 WebAPI成员资格提供程序_Asp.net Mvc_Security_Asp.net Mvc 4_Asp.net Web Api_Membership Provider - Fatal编程技术网

Asp.net mvc 无法获取要调用的自定义ASP MVC 4 WebAPI成员资格提供程序

Asp.net mvc 无法获取要调用的自定义ASP MVC 4 WebAPI成员资格提供程序,asp.net-mvc,security,asp.net-mvc-4,asp.net-web-api,membership-provider,Asp.net Mvc,Security,Asp.net Mvc 4,Asp.net Web Api,Membership Provider,我正在尝试在ASP MVC 4 WebAPI中连接一个自定义的成员私有程序,但我不知道如何替换当前的提供程序。我在提供程序的构造函数中放置了一个断点,但它从未到达该断点。运行下面的测试会在GetResponse调用上显示一条401 Unauthorized消息,因此有人试图验证该请求。我哪里做错了?几乎相同的代码运行在ASP MVC 4站点而不是WebAPI中 我知道测试中的常规逻辑正在运行,因为如果我删除Authorize属性,测试就会成功 这是我的网络配置: <authenticati

我正在尝试在ASP MVC 4 WebAPI中连接一个自定义的成员私有程序,但我不知道如何替换当前的提供程序。我在提供程序的构造函数中放置了一个断点,但它从未到达该断点。运行下面的测试会在GetResponse调用上显示一条401 Unauthorized消息,因此有人试图验证该请求。我哪里做错了?几乎相同的代码运行在ASP MVC 4站点而不是WebAPI中

我知道测试中的常规逻辑正在运行,因为如果我删除Authorize属性,测试就会成功

这是我的网络配置:

<authentication mode="Forms" />
<profile enabled="false">
  <providers>
    <clear/>
  </providers>
</profile>
<membership  defaultProvider="MyMembershipProvider">
  <providers>
    <clear/>
    <add name="MyMembershipProvider" 
         type="CustomWebApiMembershipProvider" 
         applicationName="AppName"/>
  </providers>
</membership>

<roleManager enabled="true" defaultProvider="MyWebApiRoleProvider">
  <providers>
    <clear/>
    <add name="MyWebApiRoleProvider" type="CustomWebApiRoleProvider" />
  </providers>
</roleManager>
这是我的控制器:

[Authorize]
public class TestApiSecureController : ApiController
{
    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] {"CustomWebApi Secured Access"};
    }
}

看起来表单身份验证需要一些Cookie魔法,这不是由HttpWebRequest处理的。您需要创建自己的授权属性-签出:

[Authorize]
public class TestApiSecureController : ApiController
{
    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] {"CustomWebApi Secured Access"};
    }
}
    [Test]
    public void Authorize_WhenApiKeyProvided_ReturnsValidResponse()
    {
        var request = WebRequest.Create("http://localhost:4011/api/TestApiSecure") as HttpWebRequest;
        AddAuthorizationInfo(request, "username", "pleaseLetMeIn");

        //we keep timing out when stepping through in debug, so set huge timeout
        request.Timeout = 100000;

        var response = request.GetResponse();
        var reader = new StreamReader(response.GetResponseStream());
        var result = reader.ReadToEnd();
        Assert.IsTrue(result.Contains("CustomWebApi"));
    }
    private void AddAuthorizationInfo(HttpWebRequest request, string username, string password)
    {
        var usernamePwString = username + ":" + password;
        var authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(usernamePwString));
        request.Headers["Authorization"] = "Basic" + authInfo;
    }