1. 程式人生 > >Web Api返回值

Web Api返回值

namespace WebApi.Controllers
{
    public class HomeController : ApiController
    {
        [HttpGet]
        public int GetByAge(string name)
        {
            if (name == "admin") return 25;
            if (name == "lily") return 18;
            return 0; //Action 的返回值可以是普通型別,這是最常用的。
        }

        [HttpGet]
        public void ExecuteFun()
        {
            //Action 的返回值可以為void,這樣客戶端會得到204 的狀態碼,儘量別這樣幹
        }

        public IHttpActionResult Add(int i)
        {
            if (i == 1)
            {
                return Ok(); //如果返回Ok(),就表示不向客戶端返回任何資訊,只告訴客戶端請求成功。
            }
            if (i == 2)
            {
                return Json(new { code = 0, data = "abc" }); //返回一個json資料
            }
            if (i == 3)
            {
                List<string> list = new List<string>() { "tom", "lily", "luc" }; //返回一個泛型json資料
                return Json<List<string>>(list);
            }
            if (i == 4)
            {
                return Content(HttpStatusCode.OK, new { data = "abc" }); //向客戶端返回http狀態碼和值(值可以是物件,也可以是其他型別)
            }
            if (i == 5)
            {
                return Content<string>(HttpStatusCode.OK, "abc");//向客戶端返回http狀態碼和指定型別的值
            }
            if (i == 6)
            {
                return StatusCode(HttpStatusCode.NotFound); //返回一個狀態碼 HttpStatusCode是一個列舉
            }
            if (i == 7)
            {
                return BadRequest("錯誤"); //向客戶端返回400的http錯誤。
            }

            return NotFound();//NotFound()方法會返回一個404的錯誤到客戶端。
        }

        //向客戶端返回一個http響應的訊息物件(比較精細化的控制返回訊息)
        public HttpResponseMessage Index()
        {
            HttpResponseMessage msg = new HttpResponseMessage();
            msg.StatusCode = System.Net.HttpStatusCode.OK; //設定http狀態碼
            msg.Content = new StringContent("內容哈哈哈哈");
            msg.Headers.Add("UserName", "Tom");
            msg.Headers.Age = TimeSpan.FromDays(2);
            return msg;
        }

        public HttpResponseMessage Export()//匯出的Excel檔案輸出到客戶端瀏覽器
        {
            //取資料
            var lstRes = OrderBLL.Export();

            //向Excel裡面填充資料
            HSSFWorkbook workbook = new HSSFWorkbook();
            CreateAndFillSheet(workbook, lstRes);

            //儲存到服務
            var fileName = "Excel" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
            var strPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Data\" + fileName);
            using (FileStream fs = new FileStream(strPath, FileMode.Create))
            {
                workbook.Write(fs);
                using (MemoryStream ms = new MemoryStream())
                {
                    workbook.Write(ms);
                }
            }

            //輸出到瀏覽器
            try
            {
                //將檔案流儲存在StreamContent物件裡面,然後輸出到瀏覽器。在瀏覽器端即可將Excel輸出。
                var stream = new FileStream(strPath, FileMode.Open);
                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Content = new StreamContent(stream);
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = fileName
                };

                return response;
            }
            catch
            {
                return new HttpResponseMessage(HttpStatusCode.NoContent);
            }
        }
    }
}