将现有 asp.net-mvc 站点的一些调用公开给 Intranet 内的其他 REST 客户端?

2024-03-29

我有一个现有的 asp.net-mvc 网站,现在我需要公开一些对外部应用程序的调用,这些应用程序目前仅在我的网站中使用。这一切都发生在我公司的内部网内。

我读过了这一页 http://www.binaryintellect.net/articles/7bfdd512-91e3-49a4-865d-6dd03ace73fb.aspx这也解释了 Web API 与控制器操作正如这个 SOF 问题 https://stackoverflow.com/questions/10479055/consuming-asp-net-mvc-action-methods这似乎有类似的问题,但答案似乎有点过时。因此,我试图根据最新的可用功能确定满足我的要求的最简单的解决方案。

就我而言,由于我已经在当前网站中使用了相同的控制器操作,因此 WEB API 并没有真正意义,但如果我在 google 上搜索有关 asp.net-mvc 身份验证或安全性的任何内容,我只会看到有关 Web API 的文章。

鉴于此,我试图找出将我的控制器操作暴露给另一个应用程序的最佳实践。


在理想的情况下,您可以按照其他人的建议将应用程序转换为 Web api 控制器,但为了更务实,您可以实现一个临时解决方案,通过扩展仅公开所需的调用ApiController

您没有提到您当前的应用程序正在使用哪个版本的 MVC,也没有提到您当前的控制器如何将数据返回到 Web 应用程序。 因此,我假设您通过视图模型和剃刀视图返回数据。例如:

public class ProductsController : Controller
{
      public void Index()
      { 
            var view = new ProductsListView();
            view.Products = _repository.GetProducts();
            return View(view);
      }
}

假设现在您想通过类似 REST 的 api 公开产品列表? 首先检查您是否安装了 Web api(通过 nuget)

安装包 Microsoft.AspNet.WebApi

(我再次不确定您使用的是哪个版本的 ASP.NET,因此此过程可能因版本而异)

现在在你的public void Application_Start()

GlobalConfiguration.Configure(WebApiConfig.Register);//add this before! line below
RouteConfig.RegisterRoutes(RouteTable.Routes);//this line shld already exist

and in WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

我喜欢创建一个专门的folder调用 ApiControllers 并添加同名控制器;这样你就可以在不同的命名空间中使用具有相同名称的控制器:

namespace YourApp.Web.ApiControllers
{
    [AllowAnonymous]
    public class ProductsController : ApiController
    {
        [HttpGet]
        public HttpResponseMessage Products()
        {
              var result = new ProductResult();//you could also use the view class ProductsListView
              result.Products = _repository.GetProducts();
              return Request.CreateResponse(httpStatusCode, result);
        }
    }
}

然后您可以通过以下方式访问它yourapp.com/api/products

注意,尝试减少控制器内的代码重复 - 这可以通过提取公共部分和服务类来实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将现有 asp.net-mvc 站点的一些调用公开给 Intranet 内的其他 REST 客户端? 的相关文章

随机推荐

  • 恢复 Typescript 定义 Nuget 包

    我目前正在开发一个新项目 该项目将 Typescript 用于所有客户端代码 我使用许多纯 JavaScript 库来让它们与我的 Typescript 一起使用 我使用 Nuget 通过以下包管理器命令提取 d ts 文件 包管理器命令示
  • UserManager SendEmailAsync 未发送电子邮件

    我正在使用以下代码尝试异步发送电子邮件 但没有发送电子邮件 并且我不确定哪里做错了 我还在 web config 中添加了电子邮件协议的第二段代码 发送电子邮件异步代码 await UserManager SendEmailAsync us
  • Android 上的 AWS CloudWatch Log

    我正在尝试在 Android 应用程序中使用 AWS CloudWatch Log 我对 aws client 有以下配置 val basicAWSCredentials BasicAWSCredentials Xxxxxx Yyyyyy
  • 字符串交错的动态规划问题解决方案

    我试图解决这个问题 但我放弃了 找到了下面的解决方案 尽管我不明白该解决方案是如何工作的 或者为什么它有效 任何深入的解决方案将不胜感激 问题 Given s1 s2 s3 求是否s3由交错形成s1 and s2 例如 给定 s1 aabc
  • 如何从 python 中的命名元组中获取名称?

    我创建一个像这样的命名元组 from collections import namedtuple spam namedtuple eggs x y z ham spam 1 2 3 然后我可以使用例如访问火腿的元素 gt gt gt ham
  • 禁用部分内容的 CSS

    我正在使用 Yii bootstrap 扩展 但遇到一些样式问题 因为 bootstrap css 文件影响页面的主要内容 我的主要内容是使用 OpenLayers 完成的地图 因此我在它们之间混合样式时遇到了一些问题 我尝试做一个更通用的
  • 没有 v-model 的 Vue.JS 复选框

    尝试在不使用 v model 的情况下创建复选框
  • 服务层/存储库模式

    我正在使用 EF4 的服务层 存储库 工作单元模式构建一个 MVC 应用程序 我对逻辑有点困惑 我知道重点是解耦系统 但我有点困惑 因此 MVC 控制器调用服务来填充视图模型 那么可以肯定地说 MVC 应用程序耦合到服务层吗 然后服务层调用
  • sqlite3 - 插入 - javascript 对象作为值

    使用 javascript 对象作为 sqlite3 插入的值的最简单的解决方案是什么 下面的代码不起作用 const values name John age 34 language english db run INSERT INTO
  • 为什么 lodash 在否定函数中使用 switch-case? [复制]

    这个问题在这里已经有答案了 下面的代码是源码negateLodash 中的函数 我们可以看到 当参数长度小于4时 它使用switch case而不是使用apply直接地 这段代码有什么魔力呢 它会使性能更好吗 为什么分割点是4 functi
  • 如何更改 django runserver url?

    我正在尝试更改 django 项目 url 以便想要连接到局域网中网站的用户将看到 url 而不是 localhost 8000 或 127 0 0 1 我需要将 localhost 8000 users board 更改为http exa
  • Rails Engine + Mongoid:找不到名为“default”的会话的配置

    我创建了一个 Rails Mountable 应用程序并添加了 mongoid 和 rspec gem 如果我现在尝试运行我的规范 我会收到以下错误 Mongoid Errors NoSessionConfig Problem No con
  • HTML5 本地存储和变量类型

    我正在对 HTML5 中的本地存储进行一些测试 注意我使用的是 Safari 6 0 2 因为似乎许多 Web 引擎处理它们的方法不同 如果我这样做 localStorage setItem subTotal Number 12345 I
  • JavaScript 字符串连接速度

    有人可以向我解释一下这个吗 http jsperf com string concatenation 1 2 http jsperf com string concatenation 1 2 如果你很懒 我测试了 A 和 B A var i
  • ExecutorService workStealingPool 和取消方法

    您能想到为什么这段代码不起作用并且总是输出 完成 但第二个示例可以正常工作的任何原因吗 我正在使用最新的 JDK 8u45 public static class MyClass implements Runnable Override p
  • 将猫鼬流转换为数组

    我曾经使用过 mongodb 但对 mongoose ORM 还很陌生 我试图从集合中获取数据 explain 输出显示 50 毫秒 通过 mongoose 获取数据的总时间为 9 秒 这是查询 Node find dataset data
  • 无法在 Spring Boot 2(版本 2.0.0.M7)中包含 Prometheus 指标

    无法在 Spring Boot 2 版本 2 0 0 M7 项目中包含 Prometheus 指标 根据千分尺文档 https micrometer io docs ref spring 2 0 prometheus added sprin
  • 使用facet_wrap 设置中间的最后一个图

    我正在尝试使用facet wrap 创建一些多重图 但是我不确定这是否是适合我的图表的正确方法 这是一个简短的可重现示例 ggplot airquality aes x Day y Temp facet wrap Month geom li
  • Rails 的 recaptcha 插件

    我目前正在使用 ambethia 的 Rails recaptcha 插件 我想禁用该消息 验证码错误 每当用户错误地输入错误的验证码时 我该怎么做呢 在源文件中 我得到了围绕错误消息的以下标签 p class recaptcha erro
  • 将现有 asp.net-mvc 站点的一些调用公开给 Intranet 内的其他 REST 客户端?

    我有一个现有的 asp net mvc 网站 现在我需要公开一些对外部应用程序的调用 这些应用程序目前仅在我的网站中使用 这一切都发生在我公司的内部网内 我读过了这一页 http www binaryintellect net articl