在wcf服务中处理返回的html

问题描述 投票:0回答:1

我必须编辑 IIS 下托管的 wcf 服务。

看起来像普通的 Web 服务,我可以在公共项目接口下添加和删除 [OperationContract] 方法,并将它们更新到 SOAP 信封中。杰出的。问题来了:我必须重构所有前端的东西(以及后端的很大一部分),并且我希望向项目添加一个模板引擎,因为目前 Web 端的东西非常多余并且写得不好。我选择了 DotLiquid 库,但是如果你们有更好的解决方案,请随时提出建议,我是 .NET 环境的新手。 也就是说,我看到所有 html 文件都位于根目录下的 web 目录下。 我可以通过浏览 ip_addr:port/web/fie.html 来获取它们,但我无法获取项目中的处理位置。我想编写自定义 “paths” 来处理特定视图,从磁盘读取 html 文件,渲染它们,最后将它们作为文本/html 响应。我读了一些东西,但所有这些都是关于提供 html 切片作为响应,我想用路径视图逻辑处理页面模板,有点不同。

例如,在Python下,使用Django框架,您可以定义驱动到可以读取和渲染文件的特定视图的路径,将它们作为HtmlHttpResponse服务。
是否可以通过 wcf 服务来实现这一点?

提前致谢。
呵呵。

c# wcf
1个回答
0
投票

我通过包含 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>

加载主页/索引路由将按预期返回组装页面。

enter image description here

希望有帮助。
呵呵。

© www.soinside.com 2019 - 2024. All rights reserved.