gpt4 book ai didi

web-services - 我是在用这个基于 ASP.NET Web API 的网络服务器重新发明轮子吗?

转载 作者:行者123 更新时间:2023-12-04 05:11:23 25 4
gpt4 key购买 nike

在独立(自托管)应用程序中,我希望有一个 httpserver,它在单个基本地址上可以提供简单的网页(没有任何服务器端动态/脚本,它只返回内容请求文件)或提供 RESTful web 服务:

  • 当请求 http://localhost:8070/{filePath} 时,它应该返回文件的内容(html、javascript、css、图像),就像一个普通的简单网络服务器
  • 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 是使用以下原始代码为网页提供服务的 Controller :

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 的 Controller 。

我现在的问题是:我走在正确的轨道上吗?我有点感觉我在这里重建一个网络服务器,重新发明轮子。我想可能有很多 http 请求网络浏览器可能会导致我在这里无法正确处理。

但是,如果我想通过相同的基地址自行托管并同时服务器 REST Web API 和网页,我还有什么其他选择?

最佳答案

看起来您正在尝试为自己的主机重新创建 asp.net FileHandler。不过有更好的解决方案。使用 Katana(OWIN 主机)作为 Web API 的托管层。 OWIN 支持在同一应用程序中托管多个 OWIN 框架。在您的情况下,您可以在同一个 OWIN 应用程序中同时托管 Web API 和文件处理程序。

Filip 有一篇很好的博客文章可以帮助您入门 here .您可以使用这样的配置代码,

public void Configuration(IAppBuilder appBuilder)
{
// configure your web api.
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("default-api", "api/{controller}");
appBuilder.UseWebApi(config);

// configure your static file handler.
appBuilder.UseStaticFiles();
}

关于web-services - 我是在用这个基于 ASP.NET Web API 的网络服务器重新发明轮子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16446996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com