关于c#–如何在FakeHttpContext中设置Request.Header以进行单元测试和c#发起http请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.netHttpCont
关于c# – 如何在FakeHttpContext中设置Request.Header以进行单元测试和c# 发起http请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net HttpContext.Current.Request.RawUrl、.net – HttpContext.Request和Request之间的区别、.net – 如何使单元测试可以使用HttpContext?、asp.net – HttpContext.Current.Request.IsAuthenticated和HttpContext.Current.User.Identity.IsAuthenticated有什么区别?等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- c# – 如何在FakeHttpContext中设置Request.Header以进行单元测试(c# 发起http请求)
- .net HttpContext.Current.Request.RawUrl
- .net – HttpContext.Request和Request之间的区别
- .net – 如何使单元测试可以使用HttpContext?
- asp.net – HttpContext.Current.Request.IsAuthenticated和HttpContext.Current.User.Identity.IsAuthenticated有什么区别?
c# – 如何在FakeHttpContext中设置Request.Header以进行单元测试(c# 发起http请求)
public static HttpContext FakeHttpContext() { var httpRequest = new HttpRequest("","http://stackoverflow/",""); var stringWriter = new StringWriter(); var httpResponse = new HttpResponse(stringWriter); var httpContext = new HttpContext(httpRequest,httpResponse); var sessionContainer = new HttpSessionStateContainer("id",new SessionStateItemCollection(),new HttpStaticObjectsCollection(),10,true,HttpCookieMode.AutoDetect,SessionStateMode.InProc,false); httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor( BindingFlags.NonPublic | BindingFlags.Instance,null,CallingConventions.Standard,new[] { typeof(HttpSessionStateContainer) },null) .Invoke(new object[] { sessionContainer }); return httpContext; }
这可以在没有标题的情况下工作,但是当我在httpRequest和stringWriter行之间添加任何这些代码行时.
httpRequest.Headers.Add("blah","1234"); httpRequest.Headers["blah"] = "1234";
它抛出
An exception of type ‘System.PlatformNotSupportedException’ occurred
in System.Web.dll but was not handled in user code
>为什么我得到那个例外?
>是否有可能的方法将标头添加到HttpContext进行测试
WebApi控制器?
解决方法
var request = new HttpRequestMessage(HttpMethod.Get,"http://stackoverflow"); request.Headers.Add("deviceid","1234"); _myController.Request = request;
.net HttpContext.Current.Request.RawUrl
.net HttpContext.Current.Request.RawUrl 获取当前请求的原始URL 是什么意思什么是原始URL,取得的值是什么,在JAVA中该如何实现 请指教
.net – HttpContext.Request和Request之间的区别
> HttpContext.Current.Request
> HttpContext.Request
>请求
这些是完全一样的吗?
编辑1
在global.asax / global.asax.vb和default.aspx / default.aspx.vb中,这些对象的行为不同.
编辑2
好的,我会尝试这个具体的这个时间.我应该使用以下哪项?
' File: global.asax Protected Sub Application_BeginRequest(ByVal sender As Object,ByVal e As System.EventArgs) If Request.Url.Port = 80 Then 'If HttpContext.Current.Request.Url.Port = 80 Then 'If HttpContext.Request.Url.Port = 80 Then 'do something End If End Sub ' File: default.aspx Public Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) If Request.Url.Port = 80 Then 'If HttpContext.Current.Request.Url.Port = 80 Then 'If HttpContext.Request.Url.Port = 80 Then 'do something End If End Sub
解决方法
> HttpContext.Current
是返回线程当前的HttpContext的静态属性
> HttpContext.Request
是一个返回HttpRequest的实例属性,用于您调用的HttpContext
> Page.Request
是Page的一个实例属性,返回与您调用它的页面相关联的请求(通常是隐式的)
所以HttpContext.Current.Request将使用前两个属性来获取与当前线程关联的请求.如果您处于请求的线程中,那将与正在呈现的相关页面中的Page.Request相同.
但是,如果您的渲染开始不同的线程,则在另一个线程中运行的代码仍然可以通过Page.Request获取请求(因为它只是一个普通属性),但是没有与线程相关联的HttpContext – 所以HttpContext .Current.Request不行.
编辑:要回答编辑的问题,在global.asax中,Request属性是指HttpApplication.Request
,可能是最好的方法. HttpContext.Request将不起作用,因为它试图访问静态属性,就像它是一个实例属性一样. HttpContext.Current.Request应该工作,假设上下文已经与线程相关联了.
.net – 如何使单元测试可以使用HttpContext?
我面临的问题是这个类的静态构造函数使用HttpContext.Current属性,因为我从类库运行我的单元测试,我在测试时没有HttpContext.
看看我的静态构造函数:
static UploadedFile() { if (HttpContext.Current == null) throw new Exception("web server not available"); HttpServerUtility server = HttpContext.Current.Server; // SET UploadedFileMappingFile Names: _resourceFileNames = new StringDictionary(); _resourceFileNames[_suppoertedFileStructures] = server.MapPath(SupportedUploadedFileStructures); _resourceFileNames[_supportedFileStructuresXSD] = server.MapPath(SupportedUploadedFileStructuresXSD); _resourceFileNames[UploadedFileEnum.UploadedFileFormatENUM.CSV.ToString()] = server.MapPath(UploadedFileColumnMap); }
我应该在我的测试环境中做什么,以便HttpContext.Current不会为null,我可以成功设置它:
HttpServerUtility server = HttpContext.Current.Server;
解决方法
例如,您可以调用该方法:
var wrapper = new HttpContextwrapper(HttpContext.Current); Foo.UploadedFile(wrapper);
在您的单元测试中(使用Rhino Mocks):
var contextMock = MockRepository.GenerateMock<HttpContextBase>(); // Todo: Define expectations on the mocked object Foo.UploadedFile(contextMock);
或者,如果您愿意,请使用Constructor Injection.
asp.net – HttpContext.Current.Request.IsAuthenticated和HttpContext.Current.User.Identity.IsAuthenticated有什么区别?
你会在哪种情况下使用哪一个?
解决方法
public bool IsAuthenticated { get { return (((this._context.User != null) && (this._context.User.Identity != null)) && this._context.User.Identity.IsAuthenticated); } }
今天关于c# – 如何在FakeHttpContext中设置Request.Header以进行单元测试和c# 发起http请求的介绍到此结束,谢谢您的阅读,有关.net HttpContext.Current.Request.RawUrl、.net – HttpContext.Request和Request之间的区别、.net – 如何使单元测试可以使用HttpContext?、asp.net – HttpContext.Current.Request.IsAuthenticated和HttpContext.Current.User.Identity.IsAuthenticated有什么区别?等更多相关知识的信息可以在本站进行查询。
本文标签: