2011-11-14 12 views
9

Tôi có dịch vụ WCF tự lưu trữ đang chạy dưới dạng dịch vụ cửa sổ bằng cách sử dụng WebAPI để xử lý các công cụ REST và hoạt động tốt.Làm cách nào để trả lại html thô từ WCF WebAPI WebGet

Tôi nhận ra rằng tôi thực sự nên sử dụng IIS hoặc tương tự như món ăn ra các trang web thực tế, nhưng có cách nào để có được một cuộc gọi dịch vụ trả lại "chỉ" html?

Thậm chí nếu tôi chỉ định "BodyStye Bare", tôi vẫn nhận được bao bọc xung quanh XML HTML thực tế, tức là

<?xml version="1.0" encoding="UTF-8"?> 
<string> html page contents .... </string> 


[WebGet(UriTemplate = "/start", BodyStyle = WebMessageBodyStyle.Bare)] 
public string StartPage() 
{ 
    return System.IO.File.ReadAllText(@"c:\whatever\somefile.htm"); 
} 

Có cách nào để làm điều này hay tôi nên bỏ?

Trả lời

16

Thuộc tính bodystyle không có hiệu lực trên WCF Web API. Ví dụ bên dưới sẽ hoạt động. Nó không nhất thiết phải là cách tốt nhất để làm điều đó, nhưng nó sẽ làm việc giả định tôi đã không thực hiện bất kỳ lỗi chính tả :-).

[WebGet(UriTemplate = "/start")] 
public HttpResponseMessage StartPage() { 
    var response = new HttpResponseMessage(); 
    response.Content = new StringContent(System.IO.File.ReadAllText(@"c:\whatever\somefile.htm")); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); 
    return response; 
} 

Có thể có ý nghĩa hơn khi đọc tệp dưới dạng luồng và sử dụng StreamContent thay vì StringContent. Hoặc thật dễ dàng để làm cho lớp FileContent của riêng bạn chấp nhận tên tệp như một tham số.

Và, tùy chọn tự lưu trữ cũng giống như cách khả thi để trả về HTML tĩnh khi sử dụng IIS. Dưới nắp chúng sử dụng trình điều khiển chế độ hạt nhân HTTP.sys giống nhau để phân phối các bit.

+3

Cảm ơn đống, đủ gần để đưa tôi tới đó, tôi chỉ phải thay đổi một dòng thành "response.Content.Headers.ContentType = new MediaTypeHeaderValue (" text/html "); " – Swordblaster

4

Bạn sẽ phải sử dụng trình định dạng chấp nhận "văn bản/html" làm loại nội dung và yêu cầu loại nội dung "văn bản/html" trong tiêu đề yêu cầu của bạn.

Nếu bạn không thêm trình định dạng xử lý văn bản/html, API Web sẽ quay trở lại trình định dạng XML làm mặc định.

Trong trường hợp của bạn, trình định dạng không cần phải định dạng bất cứ điều gì nhưng chỉ trả về giá trị trả về của bạn khi bạn trả về định dạng html.