asp.net – 如何将HttpRequestBase转换为HttpRequestMessage,考
发布时间:2020-12-16 04:37:20 所属栏目:asp.Net 来源:网络整理
导读:我将HttpRequestBase包装为HttpRequestMessage,它需要复制所有标头.但由于HttpRequestMessage特别关于哪些头应用于请求对象与Content对象,因此下面的httpRequest.Headers.Add行有时会抛出InvalidOperationException. public static HttpRequestMessage AsHtt
我将HttpRequestBase包装为HttpRequestMessage,它需要复制所有标头.但由于HttpRequestMessage特别关于哪些头应用于请求对象与Content对象,因此下面的httpRequest.Headers.Add行有时会抛出InvalidOperationException.
public static HttpRequestMessage AsHttpRequestMessage(this HttpRequestBase request) { Requires.NotNull(request,"request"); var httpRequest = new HttpRequestMessage(new HttpMethod(request.HttpMethod),request.Url); foreach (string header in request.Headers) { httpRequest.Headers.Add(header,request.Headers.GetValues(header)); } if (request.Form != null) { // Avoid a request message that will try to read the request stream twice for already parsed data. httpRequest.Content = new FormUrlEncodedContent(request.Form.AsKeyValuePairs()); } else if (request.InputStream != null) { httpRequest.Content = new StreamContent(request.InputStream); } return httpRequest; } 显然,我希望我的代码不会抛出异常,而是将每个标头适当地应用于适当的对象.我怎么预测呢?我是否可以使用任何方法来测试标题的适用性,而不是生成和捕获异常的标题? 解决方法
事实证明这很简单.这个片段的灵感源自
ASP.NET’s own open sourced source code.
/// <summary> /// Clones an <see cref="HttpWebRequest" /> in order to send it again. /// </summary> /// <param name="message">The message to set headers on.</param> /// <param name="request">The request with headers to clone.</param> internal static void CopyHeadersFrom(this HttpRequestMessage message,HttpRequestBase request) { Requires.NotNull(request,"request"); Requires.NotNull(message,"message"); foreach (string headerName in request.Headers) { string[] headerValues = request.Headers.GetValues(headerName); if (!message.Headers.TryAddWithoutValidation(headerName,headerValues)) { message.Content.Headers.TryAddWithoutValidation(headerName,headerValues); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用ASP.NET Identity实现基于声明的授权,高级篇
- 在对ASP.NET MVC Action的AJAX请求期间有网络请求超时时会发
- asp.net-mvc – 是否可以将XDocument作为参数传递给ASP.NET
- asp.net-mvc – 是否可以在基于路由的MVC4中使用不同的布局
- asp.net – Request.IsAuthenticated永远不会成立
- 在预编译asp.net网站 – 是否重要?
- 如何使用ASP.NET C#设置html输入类型文本值?
- asp-classic – VBScript条件短路解决方法
- 从ASP.NET MVC2向iPhone提供视频文件
- asp.net-mvc – 与MVC一起使用的学习实体框架,首先采用哪种
推荐文章
站长推荐
- asp.net mvc 之旅—— 第四站 学会用Reflector调
- asp.net – 检查.NET中两个双精度相等的问题 –
- asp.net – 如何在MVC3 .net中实现DotNetOpenAut
- Asp.Net MVC:Server Controls vs Html类来呈现控
- asp.net – asp mvc http以对象作为参数获取动作
- 从ASP.NET页面启动.NET DLL
- asp.net-mvc – 为什么不在ASP.NET MVC项目的Con
- asp.net-mvc – 将依赖项注入验证属性Web Api As
- asp.net – 如何向IIS添加反射权限或将其添加到w
- iis-7.5 – ASP.NET 5将应用程序添加为IIS应用程
热点阅读