我必须编辑 IIS 下托管的 wcf 服务。
看起来像普通的 Web 服务,我可以在公共项目接口下添加和删除 [OperationContract] 方法,并将它们更新到 SOAP 信封中。杰出的。问题来了:我必须重构所有前端的东西(以及后端的很大一部分),并且我希望向项目添加一个模板引擎,因为目前 Web 端的东西非常多余并且写得不好。我选择了 DotLiquid 库,但是如果你们有更好的解决方案,请随时提出建议,我是 .NET 环境的新手。 也就是说,我看到所有 html 文件都位于根目录下的 web 目录下。 我可以通过浏览 ip_addr:port/web/fie.html 来获取它们,但我无法获取项目中的处理位置。我想编写自定义 “paths” 来处理特定视图,从磁盘读取 html 文件,渲染它们,最后将它们作为文本/html 响应。我读了一些东西,但所有这些都是关于提供 html 切片作为响应,我想用路径视图逻辑处理页面模板,有点不同。
例如,在Python下,使用Django框架,您可以定义驱动到可以读取和渲染文件的特定视图的路径,将它们作为HtmlHttpResponse服务。
是否可以通过 wcf 服务来实现这一点?
提前致谢。
呵呵。
我通过包含 Microsoft.AspNet.Mvc 包来解决(https://www.asp.net/mvc)。
通过这样做,项目就能够使用模型-视图-控制器逻辑。
Microsoft.AspNet.Mvc 允许开发人员编写使用 ActionResults 处理请求的控制器。该数据包附带 Razor,它允许通过服务呈现和返回动态页面。
当然,使用 aspnet mvc 项目会更好。我分享所有这些是因为开发人员可能被迫使用旧的 wcf 服务,这可能有利于实现 mvc 逻辑。
我将留下一个关于如何设置基本内容的示例。
树
└── Project(Service)/
├── App_Data
├── App_Start/
│ └── RouteConfig.cs
├── Controllers/
│ └── HomeController.cs
├── Views/
│ ├── Home/
│ │ └── Index.cshtml
│ ├── Shared/
│ │ └── _Layout.cshtml
│ ├── _ViewStart.cshtml
│ └── Web.config (Auto generated)
└── Global.asax
基础控制器(HomeController.cs)
using System.Web.Mvc;
namespace Service.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
// C# Logic goes here
return View();
}
}
}
路由 (RouteConfig.cs)
using System.Web.Mvc;
using System.Web.Routing;
namespace Service
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
// Default
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
}
}
}
全局asax(Global.asax)
using System;
using System.Web.Routing;
namespace Service
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
protected void Session_Start(object sender, EventArgs e) {}
protected void Application_BeginRequest(object sender, EventArgs e) {}
protected void Application_AuthenticateRequest(object sender, EventArgs e) {}
protected void Application_Error(object sender, EventArgs e) {}
protected void Session_End(object sender, EventArgs e) {}
protected void Application_End(object sender, EventArgs e) {}
}
}
共享 html (_Layout.cshtml)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Service</title>
</head>
<body>
<header></header>
<main>@RenderBody()</main>
<footer></footer>
</body>
</html>
启动视图 (_ViewStart.cshtml)
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
基础视图 (Index.cshtml)
<!-- MAIN -->
<p>MAIN</p>
加载主页/索引路由将按预期返回组装页面。
希望有帮助。
呵呵。