IP地址添加到Htt的prequestMessage [英] Add IP address to HttpRequestMessage

查看:191
本文介绍了IP地址添加到Htt的prequestMessage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎样在一个IP地址添加到Htt的prequestMessage?

How do I add an IP address to a HttpRequestMessage?

我写单元测试的Web.API应用程序,我有检查呼叫者的AuthorizeAttribute IP地址 -

I am writing unit tests for a Web.API application, I have an AuthorizeAttribute that checks the callers IP address -

        string[] AllowedIPs = new string[] { "127.0.0.1",  "::1" }
        string sourceIP = "";

        var contextBase = actionContext.Request.Properties["MS_HttpContext"] as System.Web.HttpContextBase;

        if (contextBase != null)
        {
            sourceIP = contextBase.Request.UserHostAddress;
        }

        if (!string.IsNullOrEmpty(sourceIP))
        {
            return AllowedIPs.Any(a => a == sourceIP);
        }
        return false;

我建立一个测试请求如下: -

I construct a test request as follows -

    var request = CreateRequest("http://myserver/api/CustomerController, "application/json", HttpMethod.Get);            
    HttpResponseMessage response = client.SendAsync(request).Result;


    private HttpRequestMessage CreateRequest(string url, string mthv, HttpMethod method)
    {
        var request = new HttpRequestMessage();
        request.RequestUri = new Uri(url);
        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv));
        request.Method = method;
        return request;
    } 

但actionContext.Request.Properties [MS_HttpContext]为空,我无法进行测试。

BUT actionContext.Request.Properties["MS_HttpContext"] is null and I cannot perform the test.

解决方案在 - 见我自己的答案

SOLUTION BELOW - see my own answer.

推荐答案

由于达文对他的建议。

Thanks to Davin for his suggestion.

下面是解决方案 -

Here is the solution -

private HttpRequestMessage CreateRequest(string url, string mthv, HttpMethod method)
{
    var request = new HttpRequestMessage();

    var baseRequest = new Mock<HttpRequestBase>(MockBehavior.Strict);
    var baseContext = new Mock<HttpContextBase>(MockBehavior.Strict);

    baseRequest.Setup(br => br.UserHostAddress).Returns("127.0.0.1");
    baseContext.Setup(bc => bc.Request).Returns(baseRequest.Object);


    request.RequestUri = new Uri(url);
    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv));

    request.Properties.Add("MS_HttpContext", baseContext.Object);

    request.Method = method;
    return request;
} 

然后,使用该方法以下面的方式 -

Then use that method in the following way -

 var request = CreateRequest("http://myserver/api/CustomerController, "application/json", HttpMethod.Get);            
 HttpResponseMessage response = client.SendAsync(request).Result;

这篇关于IP地址添加到Htt的prequestMessage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆