Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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
C# 如何在“主机”上设置IP(UserHostAddress);嘲笑';BaseHttpContext?_C#_Asp.net_.net_Mocking - Fatal编程技术网

C# 如何在“主机”上设置IP(UserHostAddress);嘲笑';BaseHttpContext?

C# 如何在“主机”上设置IP(UserHostAddress);嘲笑';BaseHttpContext?,c#,asp.net,.net,mocking,C#,Asp.net,.net,Mocking,我试图创建一个虚拟的BaseHttpContext,在不需要执行实际请求的情况下进行一些(模拟)测试。我想在虚拟上下文中添加一个IP地址 string url = "http://www.google.com"; //wrap in uri Uri uri = new Uri(url); //create request var request = new HttpRequest("", uri.GetLeftPart(UriPartial.Path), uri.Query); reques

我试图创建一个虚拟的
BaseHttpContext
,在不需要执行实际请求的情况下进行一些(模拟)测试。我想在虚拟上下文中添加一个IP地址

string url = "http://www.google.com";

//wrap in uri
Uri uri = new Uri(url);

//create request
var request = new HttpRequest("", uri.GetLeftPart(UriPartial.Path), uri.Query);
request.ServerVariables.Add("REMOTE_ADDR", ip);

//dummy context
HttpContext context = new HttpContext(
    new HttpRequest("", uri.GetLeftPart(UriPartial.Path), uri.Query),
    new HttpResponse(new StringWriter(System.Text.Encoding.UTF8))
);

//wrap context
var contextWrapper = new HttpContextWrapper(context);
IP应该反映在
BaseHttpContext.Request.UserHostAddress
中。像这样添加一个IP:
request.ServerVariables.Add(“REMOTE\u ADDR”,IP),导致以下异常:

不支持指定的方法


看起来伪造一个
HttpContext
并不是那么容易,需要做很多工作。使用模拟框架可以使事情变得更简单。下面是一个示例,使用:

//
///伪造HTTP上下文。
/// 
///URL。
///知识产权。
///推荐人。
///HTTP上下文。
公共静态HttpContextBase FakeHttpContext(字符串url、字符串ip、字符串引用)
{
Uri=新的Uri(url);
var context=newmock();
var files=newmock();
var request=newmock();
var response=newmock();
var session=newmock();
var server=newmock();
var user=new Mock();
var identity=newmock();
request.Setup(req=>req.ApplicationPath)。返回(“~/”;
Setup(req=>req.AppRelativeCurrentExecutionFilePath)。返回(“~/”;
request.Setup(req=>req.PathInfo).Returns(string.Empty);
request.Setup(req=>req.Form).Returns(newNameValueCollection());
Setup(req=>req.QueryString).Returns(HttpUtility.ParseQueryString(uri.Query));
request.Setup(req=>req.Files).Returns(Files.Object);
request.Setup(req=>req.UserHostAddress).Returns(ip);
request.Setup(req=>req.urlreferer).Returns(新Uri(referer));
request.Setup(req=>req.Url).Returns(uri);
request.Setup(req=>req.RawUrl).Returns(url);
response.Setup(res=>res.ApplyAppPathModifier(It.IsAny())。返回((字符串virtualPath)=>virtualPath);
user.Setup(usr=>usr.Identity).Returns(Identity.Object);
identity.SetupGet(ident=>ident.IsAuthenticated).返回(true);
Setup(ctx=>ctx.Request).Returns(Request.Object);
Setup(ctx=>ctx.Response).Returns(Response.Object);
Setup(ctx=>ctx.Session).Returns(Session.Object);
Setup(ctx=>ctx.Server).Returns(Server.Object);
Setup(ctx=>ctx.User).Returns(User.Object);
返回context.Object;
}
灵感来源于。

非常有用。要解决您的问题,您只需要从post中实现
HttpRequestExtensions
NameValueCollectionExtensions

您可以这样使用它:

string url = "http://127.0.0.1";
var request = new HttpRequest(string.Empty, url, string.Empty);
request.AddServerVariable("REMOTE_ADDR", "127.0.0.1");

可能是@DennisTraub的复制品,我不认为它是复制品。我不是在做真正的请求。我需要“模拟”一个HttpContext.hi。。你能举出任何例子来使用这个http上下文吗?
string url = "http://127.0.0.1";
var request = new HttpRequest(string.Empty, url, string.Empty);
request.AddServerVariable("REMOTE_ADDR", "127.0.0.1");