如何配置ASP.NET MVC Web Api,使外部站点能访问内部网络资源?

2026-03-30 13:351阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计548个文字,预计阅读时间需要3分钟。

如何配置ASP.NET MVC Web Api,使外部站点能访问内部网络资源?

我有一个MVC+Web API(托管在IIS中),它位于wwwroot文件夹中,可以在网络中本地访问。我可以执行这样的API调用:http://mylocalapi:133/api/Values/Get。我得到一个结果。我有一个外部网站http://ex。

我有一个MVC Web API(托管在IIS中),它位于wwwroot文件夹中,可以在网络中本地访问.我可以执行这样的api调用:example.org,我想执行相同的example.org”,标题:“*”,方法:“*”)]

但我不断收到以下错误:

XMLHttpRequest无法加载example.org”访问.

因此,我在外部站点创建了一个虚拟目录(APICALLS),并创建了一个指向本地IIS站点的web.config文件:

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <mylocalapi:133" exactDestination="true" /> </system.webServer> </configuration>

当我这样做时,我尝试访问这样的API:mylocalapi:133. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'example.org' is therefore not allowed access.

我做错了什么,我该如何解决这个问题.

您无法通过JavaScript访问内部网站,因为JavaScript在客户端运行,位于最终用户的计算机上,位于内部网络之外.通过JavaScript访问API的唯一方法是:1)将API公开给外部网络,或者2)在外部站点中创建代理.

代理基本上是一个提供外部访问的操作或操作,然后将调用转换为内部API.最简单的,你可以有一个单独的动作,基本上响应如下:

foo.com/api?endpoint=/internal/api/endpoint/&someParam=foo

然后,该操作将在查询字符串中获取此信息,并使用该信息通过类似HttpClient的内容向内部API发出请求.但是,这种方法几乎暴露了整个内部API,因此您可能只是将其移到外面.更好的方法是为需要通过JavaScript进行的特定内部API调用创建特定端点(操作方法).

UPDATE

如何配置ASP.NET MVC Web Api,使外部站点能访问内部网络资源?

没有上下文,很难在这里给你任何真正的指导.假设有一个内部API端点返回一个窗口小部件列表,并且您希望通过AJAX检索此窗口小部件列表.你需要这样的东西:

public async Task<ActionResult> GetWidgets() { // fetch widgets from internal API via HttpClient return Json(widgets, JsonRequestBehavior.AllowGet); }

然后,您的AJAX会在您的网站上调用此操作方法的URL,该网站会调用内部API.

本文共计548个文字,预计阅读时间需要3分钟。

如何配置ASP.NET MVC Web Api,使外部站点能访问内部网络资源?

我有一个MVC+Web API(托管在IIS中),它位于wwwroot文件夹中,可以在网络中本地访问。我可以执行这样的API调用:http://mylocalapi:133/api/Values/Get。我得到一个结果。我有一个外部网站http://ex。

我有一个MVC Web API(托管在IIS中),它位于wwwroot文件夹中,可以在网络中本地访问.我可以执行这样的api调用:example.org,我想执行相同的example.org”,标题:“*”,方法:“*”)]

但我不断收到以下错误:

XMLHttpRequest无法加载example.org”访问.

因此,我在外部站点创建了一个虚拟目录(APICALLS),并创建了一个指向本地IIS站点的web.config文件:

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <mylocalapi:133" exactDestination="true" /> </system.webServer> </configuration>

当我这样做时,我尝试访问这样的API:mylocalapi:133. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'example.org' is therefore not allowed access.

我做错了什么,我该如何解决这个问题.

您无法通过JavaScript访问内部网站,因为JavaScript在客户端运行,位于最终用户的计算机上,位于内部网络之外.通过JavaScript访问API的唯一方法是:1)将API公开给外部网络,或者2)在外部站点中创建代理.

代理基本上是一个提供外部访问的操作或操作,然后将调用转换为内部API.最简单的,你可以有一个单独的动作,基本上响应如下:

foo.com/api?endpoint=/internal/api/endpoint/&someParam=foo

然后,该操作将在查询字符串中获取此信息,并使用该信息通过类似HttpClient的内容向内部API发出请求.但是,这种方法几乎暴露了整个内部API,因此您可能只是将其移到外面.更好的方法是为需要通过JavaScript进行的特定内部API调用创建特定端点(操作方法).

UPDATE

如何配置ASP.NET MVC Web Api,使外部站点能访问内部网络资源?

没有上下文,很难在这里给你任何真正的指导.假设有一个内部API端点返回一个窗口小部件列表,并且您希望通过AJAX检索此窗口小部件列表.你需要这样的东西:

public async Task<ActionResult> GetWidgets() { // fetch widgets from internal API via HttpClient return Json(widgets, JsonRequestBehavior.AllowGet); }

然后,您的AJAX会在您的网站上调用此操作方法的URL,该网站会调用内部API.