在一個獨立的(selfhosted)應用程序中,我希望有一個httpserver可以在單個基本地址上提供簡單的網頁(沒有任何服務器動態/腳本,它只是返回內容請求文件)或提供RESTful Web服務:我是否用這個基於ASP.NET Web API的web服務器重新發明了輪子?
- 當請求
http://localhost:8070/{filePath}
,它應該返回的文件(HTML,JavaScript的,CSS,圖像)的內容,就像一個正常的簡單Web服務器 - 背後
http://localhost:8070/api/
一切都應該只是作爲一個正常的RRESTful的Web API
我目前的做法使用的ASP.NET Web API服務器都HTML頁面和REST的API:
var config = new HttpSelfHostConfiguration("http://localhost:8070/");
config.Formatters.Add(new WebFormatter());
config.Routes.MapHttpRoute(
name: "Default Web",
routeTemplate: "{fileName}",
defaults: new { controller = "web", fileName = RouteParameter.Optional });
config.Routes.MapHttpRoute(
name: "Default API",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
的WebController
是服務網頁與此幼稚代碼控制器:
public class WebController : ApiController
{
public HttpResponseMessage Get(string fileName = null)
{
/// ...
var filePath = Path.Combine(wwwRoot, fileName);
if (File.Exists(filePath))
{
if (HasCssExtension(filePath))
{
return this.Request.CreateResponse(
HttpStatusCode.OK,
GetFileContent(filePath),
"text/css");
}
if (HasJavaScriptExtension(filePath))
{
return this.Request.CreateResponse(
HttpStatusCode.OK,
GetFileContent(filePath),
"application/javascript");
}
return this.Request.CreateResponse(
HttpStatusCode.OK,
GetFileContent(filePath),
"text/html");
}
return this.Request.CreateResponse(
HttpStatusCode.NotFound,
this.GetFileContnet(Path.Combine(wwwRoot, "404.html")),
"text/html");
}
}
同樣,對於/api
背後的所有內容,都使用普通REST API的控制器。
我現在的問題是:我在正確的軌道上?我有種感覺,我正在重建一個網絡服務器,重新發明輪子。我猜想可能有很多http請求web瀏覽器可能會讓我在這裏無法正確處理。
但是,如果我想自己託管並同時在同一基地址上使用服務器REST Web API和網頁,還有什麼其他選擇?
還有一種方法可以將WCF REST服務集成到Katana/OWIN中嗎? – bitbonk 2013-05-08 23:57:20
不是我所知道的。 – 2013-05-09 00:47:50
@bitbonk:我最近發現這個:http://www.nuget.org/packages/Gate.Wcf/(未測試過) – Robar 2013-08-28 07:50:41