本文将来聊聊对 HttpResponseMessage 调用 Dispose 进行释放的意义有多大,有没有必要性的问题 先说结论,建议通过 using 或者手动调用 Dispose 释放 HttpResponseMessage HttpResponseMessage 对象被 GC 时候,也会能够调用到 Dispose 的逻辑 调用 HttpResponseMessage 的 Dispose 的意义在于释放 HttpResponseMessage 原因是在 HttpResponseMessage 的 Dispose 方法里面,将会释放 HttpResponseMessage 的 Content 所使用的数组池的资源,让 Content 里的缓存数组返回给到数组池 HttpResponseMessage 对象。 至少这样写起来不亏 对 HttpResponseMessage 直接或间接调用 Dispose 方法,将会自动调用到 HttpResponseMessage 的 Content 的释放,也就是从 Content
第一种调用HttpResponseMessage的构造函数,实例化一个HttpResponseMessage,并返回。Web API会将其直接转换为HTTP消息。 \GreatFile.txt",FileMode.Open);//文件流 HttpResponseMessage hrm = new HttpResponseMessage 类的定义如下: public class HttpResponseMessage : IDisposable { public HttpResponseMessage(); 例: HttpResponseMessage hrm = new HttpResponseMessage { //其他设置 { HttpResponseMessage hrm = new HttpResponseMessage { //其他设置
HttpResponseException(HttpStatusCode.NotFound); 7 return item; 8 } 为了响应进行更多的控制,你也可以构造整个响应消息,并用HTTPResponseMessage if (item == null) 5 //未找到返回一个404的状态码 6 { 7 var resp = new HttpResponseMessage is NotImplementedException) 8 actionExecutedContext.Response = new System.Net.Http.HttpResponseMessage 以下实例演示了如何用HttpError在响应中返回HTTP状态码“404--未找到”: 1 public HttpResponseMessage GetProduct(int id) 2 { 3 本质上,CreateErrorResponse会创建一个HttpError实例,然后创建一个包含该HttpError的HttpResponseMessage Adding Custom Key-Values
response = (HttpResponseMessage) null; try { response = await this. 三.WebApi核心对象HttpRequestMessage和HttpResponseMessage: 1.HttpRequestMessageExtensions:HTTP消息请求实例的扩展类。 > /// 与关联的 HttpRequestMessage连接的已初始化 HttpResponseMessage /// </returns> /// <param name=" </typeparam> public static <em>HttpResponseMessage</em> CreateResponse<T>(this HttpRequestMessage request, > tcs = new TaskCompletionSource<<em>HttpResponseMessage</em>>(); HttpUtilities.ContinueWithStandard<<em>HttpResponseMessage</em>
) public HttpResponseMessage PostUserName(User user) { String userName = user.userName; HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(userName,Encoding.GetEncoding("UTF result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), " public static HttpResponseMessage toJson(Object obj) { String str; if (obj is String ||obj result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "
实现API接口 一个基本的API接口实现,没有任何的限制,客户端可以随意访问,也没有访问限制 [HttpGet] [Route("~/api/helloworld")] public HttpResponseMessage 首先想到的是在访问这个接口时,做一个计数器,记录访问的数量,达到一定的数量之后就不能访问,使用cache来实现计数 [HttpGet] [Route("~/api/helloworld")] public HttpResponseMessage } public int RequestCount { get; set; } } 这样访问超过了限制,等一段时间,就可以继续访问了 封装一下代码,将访问限制的代码提取出来 public HttpResponseMessage HelloWorld() { var throttler = new Throttler(User.Identity.Name); HttpResponseMessage response = createResponse("Hello World", throttler); return response; } private HttpResponseMessage createResponse
id) { Product item = repository.Get(id); if (item == null) { var resp = new HttpResponseMessage context.Exception is NotImplementedException) { context.Response = new HttpResponseMessage 以下示例演示了如何用HttpError在响应体中返回HTTP状态码“404 — 未找到”: public HttpResponseMessage GetProduct(int id) { Product 直接替代创建HttpError对象的一种办法是,你可以使用CreateErrorResponse方法: public HttpResponseMessage GetProduct(int id) { 本质上,CreateErrorResponse会创建一个HttpError实例,然后创建一个包含该HttpError的HttpResponseMessage。
本文主要介绍WebAPI的异常处理HttpResponseMessage。 如果 Web API 的 controller 掷出一个异常(exception),会发生什么事? public HttpResponseMessage<Contact> Get(int id) { var contact = this.repository.Get (id); if (contact == null) { var response = new HttpResponseMessage(); actionExecutedContext.Result==null) { actionExecutedContext.Result = new HttpResponseMessage 例如以下范例: [HttpGet] [NotImplExceptionFilter] public HttpResponseMessage<Contact
可以使用 HttpClient.GetAsync 方法发出 GET 请求:static async Task GetAsync(HttpClient httpClient) { using HttpResponseMessage , id = 1, title = "write code sample", completed = false }),Encoding.UTF8,"application/json");using HttpResponseMessage response.Content.ReadAsStringAsync();Console.WriteLine($"{jsonResponse}\n");}处理 HTTP 响应每当处理 HTTP 响应时,都需要与 HttpResponseMessage 可以通过 HttpResponseMessage.StatusCode 属性获取 HTTP 状态代码,并使用 HttpResponseMessage.Content 属性访问响应正文。 using HttpResponseMessage response = await httpClient.SendAsync(request);if (response.IsSuccessStatusCode
> ImmediateHttpRetry {get;} public AsyncRetryPolicy<HttpResponseMessage> LinearHttpRetry {get ;} public AsyncRetryPolicy<HttpResponseMessage> ExponentialHttpRetry {get;} public ClientPolicy() { ImmediateHttpRetry = Policy.HandleResult<HttpResponseMessage> res.IsSuccessStatusCode).RetryAsync(5); LinearHttpRetry = Policy.HandleResult<HttpResponseMessage , retryAttempt => TimeSpan.FromSeconds(3)); ExponentialHttpRetry = Policy.HandleResult<HttpResponseMessage
而HttpResponseException会返回我们指定的状态码,如返回501: public HttpResponseMessage Exception() { //直接在Action中抛出HttpResponseException 类型异常 throw new HttpResponseException(HttpStatusCode.NotImplemented); } 在抛出HttpResponseException时,可将HttpResponseMessage HttpError public HttpResponseMessage Exception() { //使用Request对象创建返回到客户端的错误信息 Request.CreateErrorResponse () } CreateErrorResponse方法是HttpResponseMessage类型的可扩展方法,该方法最终会调用扩展方法CreateResponse返回一个HttpResponseMessage 类型的对象(ASP.NET WebAPI中Action的返回值最终都会被转换为HttpResponseMessage类型的对象),该对象包含一个HttpError类型实例。
对于预检请求,CorsMessageHandler会直接创建HttpResponseMessage对象予以响应。 具体来说,如果预检请求通过了授权检验,一个状态为“200, OK”的HttpResponseMessage会被创建出来,通过CorsResult得到CORS响应报头会被添加到这个HttpResponseMessage 对于非预检请求,它会将当前请求传递给消息处理管道的后续部分进行进一步处理,并最终得到表示响应消息的HttpResponseMessage。 只有在请求通过授权检查的情况下,由CorsResult得到的CORS响应报头才会被添加到此HttpResponseMessage的报头集合中。 CorsResult得到的CORS响应报头添加到此HttpResponseMessage的报头集合中。
content = new StringContent(str); //请求地址 string url = "http://localhost:5833/api/Test/GetPostInfo"; Task<HttpResponseMessage > postTask = http.PostAsync(url,content); HttpResponseMessage result = postTask.Result;//拿到网络请求结果 result.EnsureSuccessStatusCode 这里为空 HttpContent content = new StringContent(str); //请求地址 Task<HttpResponseMessage> postTask = http.PostAsync(url, content); HttpResponseMessage result = postTask.Result;//拿到网络请求结果 result.EnsureSuccessStatusCode
/// <returns></returns> [HttpGet] [Route("menu")] public HttpResponseMessage weixin.senparc.com/weixin /// [HttpGet] [Route("")] public HttpResponseMessage echostr, UTF8Encoding.UTF8, "application/x-www-form-urlencoded"); var response = new HttpResponseMessage /// [HttpPost] [Route("")] public HttpResponseMessage Post() ></param> /// <returns></returns> [HttpGet] [Route("index")] public HttpResponseMessage
httpResponseMessage = new HttpResponseMessage(); httpResponseMessage.setResCode(ResCode.OK.getValue (rm)); return httpResponseMessage; } @Mapping(value = "/health") public HttpResponseMessage add (HttpRequestMessage httpRequestMessage) throws Exception { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); httpResponseMessage.setResCode(ResCode.OK.getValue()); httpResponseMessage.setResType (ResType.JSON.getValue()); httpResponseMessage.setMessage("echo"); return httpResponseMessage; }
Download(Guid id){ HttpResponseMessage res = new HttpResponseMessage(HttpStatusCode.OK); //附件路径 attachmentId.HasValue) { return ResponseMessage(new HttpResponseMessage(HttpStatusCode.BadRequest )); } HttpResponseMessage res = new HttpResponseMessage(HttpStatusCode.OK); var fileLength = 2000;//文件大小 var fileName = "http://xxxxxx/xxxxxx.pdf";//文件地址 HttpResponseMessage response = new HttpResponseMessage(); string MimeType = "application/octet-stream"; long speed = 1024 * 100
服务接口 接口1: //Post:http://127.0.0.1/HY_WebApi/api/V2/Key/FunctionTest1 [HttpPost] public HttpResponseMessage ..... } 接口2: //Post:http://127.0.0.1/HY_WebApi/api/V2/Key/FunctionTest2 [HttpPost] public HttpResponseMessage HttpMethod.Post, @"http://192.168.20.104/HY_WebApi/api/V2/Key/FunctionTest1")) { request.Content = content; HttpResponseMessage HttpMethod.Post, @"http://192.168.20.104/HY_WebApi/api/V2/Key/FunctionTest2")) { request.Content = content; HttpResponseMessage HttpMethod.Post, @"http://192.168.20.104/HY_WebApi/api/V2/Key/FunctionTest2")) { request.Content = content; HttpResponseMessage
HttpResponseException包含两个重载的构造函数,其中一个是构造函数参数类型为HttpResponseMessage,通过其设置状态码,错误消息短语以及消息体内容来向客户端抛出比较详细的错误信息 HttpRequestMessage Request { get; set; } public string Content { get; set; } public Task<HttpResponseMessage > ExecuteAsync(CancellationToken cancellationToken) { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.InternalServerError); response.Content
/ 获取所有商品 /// public void GetAll() { //获取 HttpResponseMessage } } } public void GetbyId(int id) { HttpResponseMessage product.Category}"); } } public void Add(Product product) { HttpResponseMessage message.ReasonPhrase); } public void Modify(int id,Product product) { HttpResponseMessage message.StatusCode, message.ReasonPhrase); } public void Delete(int id) { HttpResponseMessage
System.Net.Http 以及 System.Net.Http.Headers 提供了如下内容: HttpClient 发送和接收 HTTP 请求与响应; HttpRequestMessage and HttpResponseMessage error here // Application.Current.ReportError(t.Exception.GetBaseException()); } else { HttpResponseMessage error here // Application.Current.ReportError(t.Exception.GetBaseException()); } else { HttpResponseMessage request.Method = HttpMethod.Post; } return request; } protected override HttpResponseMessage ProcessResponse(HttpResponseMessage response, CancellationToken cancellationToken) { var request