1控制器操作的参数
控制器操作的参数可以是内置类型也可以是自定义类型,无参也是允许的。
2控制器操作返回值
类型
说明
void
操作返回值为void时,Web API返回空HTTP响应,其状态码为204(无内容)
HttpResponseMessage
Web api会将此返回值直接转换为HTTP消息
IHttpActionResult
接口形式
内置类型或自定义类型
无
2.1返回值为HttpResponseMessage
返回值为此类型时,有两种设置方式。
第一种调用HttpResponseMessage的构造函数,实例化一个HttpResponseMessage,并返回。Web API会将其直接转换为HTTP消息。
例:
public HttpResponseMessage Get() { FileStream fs = new FileStream(@"D:\GreatFile.txt",FileMode.Open);//文件流 HttpResponseMessage hrm = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StreamContent(fs, 4096) }; return hrm; }
第二种方式是调用Request.CreateResponse方法,将自定义类型传递给它。Web API会调用序列化器将其序列化后写入HTTP响应。
public HttpResponseMessage Get() { var publisher = new PublisherModel{Title ="ASP.NET Web API编程实战",Year=2018}; return Request.CreateResponse<PublisherModel>(HttpStatusCode.OK, publisher); }
HttpResponseMessage类的定义如下:
public class HttpResponseMessage : IDisposable { public HttpResponseMessage(); // 参数: statusCode:HTTP 响应的状态代码。 public HttpResponseMessage(HttpStatusCode statusCode); // 获取或设置 HTTP 响应消息的内容。 //返回 System.Net.Http.HttpContent。 HTTP 响应消息的内容。 public HttpContent Content { get; set; } //获取 HTTP 响应标头的集合。 public HttpResponseHeaders Headers { get; } //获取一个值,该值指示 HTTP 响应是否成功。 //System.Net.Http.HttpResponseMessage.StatusCode。在 200-299 //范围中,则为 true;否则为 false。 public bool IsSuccessStatusCode { get; } //获取或设置服务器与状态代码通常一起发送的原因短语。 //返回 System.String。 服务器发送的原因词组。 public string ReasonPhrase { get; set; } //获取或设置导致此响应消息的请求消息。 public HttpRequestMessage RequestMessage { get; set; } //获取或设置 HTTP 响应的状态代码。 public HttpStatusCode StatusCode { get; set; } //获取或设置 HTTP 消息版本。默认值为 1.1。 public Version Version { get; set; } //释放由 System.Net.Http.HttpResponseMessage 使用的非托管资源,并可根据需要释放托管资源。 //参数: 如果为 true,则释放托管资源和非托管资源;如果为 false,则仅释放非托管资源。 protected virtual void Dispose(bool disposing); //如果 HTTP 响应的 System.Net.Http.HttpResponseMessage.IsSuccessStatusCode 属性//为 false,将引发异常。 public HttpResponseMessage EnsureSuccessStatusCode(); //返回表示当前对象的字符串。 public override string ToString(); }
2.1.1设置响应状态:
可以通过构造函数设置响应状态码,也可以通过StatusCode 属性设置响应状态码。
2.1.2设置HTTP消息头
通过HttpResponseMessage.Headers属性设置HTTP消息头,其类型为HttpResponseHeaders,下面是这个类型的定义: