Tag: httpresponse

如何在ASP.Net中转储响应头

我正在使用VSTS 2008 + C#+ .Net 3.5来开发ASP.Net。 我想转储返回给客户端的特定aspx文件的所有响应头。 任何想法如何轻松地做到这一点? 我知道如何使用Response.Headers集合,但我的困惑是在哪里枚举以获得准确的响应标头? 例如,如果我在Page_Load中枚举,则不能枚举所有响应头,但如果我在Response.Close之后枚举,则将抛出exception。 任何建议? EDIT1:在VSTS 2008调试模式下使用OnPreRender时遇到以下exception(即按F5进行调试) {“此操作需要IIS集成管道模式。”} protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); using (StreamWriter writer = new StreamWriter(“dump123.txt”, true)) { writer.WriteLine(DateTime.UtcNow + ” Response headers”); foreach (string item in HttpContext.Current.Response.Headers.Keys) { writer.WriteLine(item + ” : ” + HttpContext.Current.Response.Headers[item]); } } } 乔治,提前谢谢

返回HttpResponseMessage的Web API最佳方法

我有一个Web API项目,我的方法总是返回HttpResponseMessage 。 所以,如果它工作或失败我返回: 没有错误: return Request.CreateResponse(HttpStatusCode.OK,”File was processed.”); 任何错误或失败 return Request.CreateResponse(HttpStatusCode.NoContent, “The file has no content or rows to process.”); 当我返回一个对象然后我使用: return Request.CreateResponse(HttpStatusCode.OK, user); 我想知道如何向HTML5客户端返回更好的封装respose,以便我可以返回有关事务的更多信息等。 我在考虑创建一个可以封装HttpResponseMessage但也有更多数据的自定义类。 有没有人实现类似的东西?

关于在ASP.NET响应流上编写的一些问题

我正在使用ASP.NET HttpHandler进行测试,以便直接在响应流上下载文件,而且我不太确定我的方式。 这是一个示例方法,将来文件可以存储在数据库中的BLOB中: public void GetFile(HttpResponse response) { String fileName = “example.iso”; response.ClearHeaders(); response.ClearContent(); response.ContentType = “application/octet-stream”; response.AppendHeader(“Content-Disposition”, “attachment; filename=” + fileName); using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath(“~/App_Data”), fileName), FileMode.Open)) { Byte[] buffer = new Byte[4096]; Int32 readed = 0; while ((readed = fs.Read(buffer, 0, buffer.Length)) > 0) { response.OutputStream.Write(buffer, 0, readed); response.Flush(); } } […]

使http客户端同步:等待响应

我有一些文件要上传,一些文件失败,因为post是异步的而不是同步的.. 我正在尝试将此调用作为同步调用.. 我想等待回应。 如何将此调用设置为同步? static async Task Upload(string key, string url, string sourceFile, string targetFormat) { using (HttpClientHandler handler = new HttpClientHandler { Credentials = new NetworkCredential(key, “”) }) using (HttpClient client = new HttpClient(handler)) { var request = new MultipartFormDataContent(); request.Add(new StringContent(targetFormat), “target_format”); request.Add(new StreamContent(File.OpenRead(sourceFile)), “source_file”, new FileInfo(sourceFile).Name); using (HttpResponseMessage response = await client.PostAsync(url, […]

WebApi2 IHttpActionResult强类型返回值

这样做是可能的,也不是理想的:(一个非常简单的例子!) [Serializable] public class MyRecord { public string key {get; set;} public string data {get; set;} } public async Task Get(string SomeKey) { if(ExistsInDB(SomeKey)) { return Ok(SomeRecordFromDB(SomeKey)); //SomeRecord() returns a POCO MyRecord. } else { //I know I can return NotFound() but not the focus of my Q return Ok(false); //returns “False” } } 有效地certificate在返回类型上没有编译时错误检查。 […]

GZipStream正在切断XML的最后一部分

我创建了一个名为AddGZip的扩展方法,如下所示: public static void AddGZip(this HttpResponse response) { response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); response.AppendHeader(“Content-Encoding”, “gzip”); } 这是代码的一个非常简化的版本: var response = HttpContext.Current.Response; var request = HttpContext.Current.Request; var result = File.ReadAllText(path); if (request.SupportsGZip) { response.AddGZip(); } response.Write(result); response.Flush(); 当您在具有GZip支持的Web浏览器中查看响应时,会出现如下错误: “XML解析错误:未关闭的令牌位置: http://webserver1/1234.xml第78行,第1列:” 当我查看源代码时,它基本上错过了XML文件末尾的最后一个> 。 所以1或2个字节。 如果我注释掉AddGZip线,它可以正常工作。 但是我真的想支持GZip,因为XML可能非常大。 有人对我有建议吗? 我已经尝试检查了很多博客,但似乎没有针对此类错误的解决方案。 戴夫

如何从HttpResponseMessage获取特定的标头值

我正在进行HTTP呼叫。 我的响应在HttpResponseMessage对象的标题部分中包含会话代码X-BB-SESSION 。 如何获取特定的标头值? 我正在使用foreach语句迭代所有标头( MSDN链接 )。 但是编译器一直说不能这样做: foreach statement cannot operate on variables of type System.net.http.headers.cachecontrolheadervalue because ‘System.net.http.headers.cachecontrolheadervalue’ doesn’t contain a public definition for ‘GetEnumerator’ 这是我正在尝试的代码: //Connection code to BaasBox HttpResponseMessage response = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead); if (response.IsSuccessStatusCode) { //get the headers HttpResponseHeaders responseHeadersCollection = response.Headers; foreach (var value in responseHeadersCollection.CacheControl) –> HERE { […]

获取Content-Disposition参数

如何使用WebClient获取从WebAPI控制器返回的Content-Disposition参数? WebApi控制器 [Route(“api/mycontroller/GetFile/{fileId}”)] public HttpResponseMessage GetFile(int fileId) { try { var file = GetSomeFile(fileId) HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StreamContent(new MemoryStream(file)); response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue(“attachment”); response.Content.Headers.ContentDisposition.FileName = file.FileOriginalName; /********* Parameter *************/ response.Content.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue(“MyParameter”, “MyValue”)); return response; } catch(Exception ex) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex); } } 客户 void DownloadFile() { WebClient wc = […]

无法在Image类中找到FromStream

我有以下代码: Image tmpimg = null; HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream stream = httpWebReponse.GetResponseStream(); return Image.FromStream(stream); 在我输入Image.的最后一行Image. , FromStream不在列表中。 我能做什么?

如何在ASP.NET 5 / MVC 6中创建响应消息并向其添加内容字符串

在web api 2中,我们习惯这样做以获得字符串内容的响应: var response = Request.CreateResponse(HttpStatusCode.Ok); response.Content = new StringContent(“”, Encoding.UTF8, “application/json”); 如何在不使用像ObjectResult这样的内置类的情况下在ASP.NET 5 / MVC 6中实现相同的function?