【问题标题】:How does Web API respond without being hosted?Web API 在没有托管的情况下如何响应?
【发布时间】:2017-01-13 15:04:46
【问题描述】:

我在此处关注有关 Web API 2 的 Microsoft 教程 Web API 2 tutorial.

我试图运行它,但遇到了 403.14 错误。经过一些研究,我发现您只需要构建它并从浏览器调用它的功能,如下所述: Answer to Dealing with 403.14 error.

我的印象是需要托管 Web API 才能被调用,如果我不运行它,浏览器如何调用它的函数?

【问题讨论】:

    标签: c# asp.net api asp.net-web-api asp.net-web-api2


    【解决方案1】:

    当您创建一个新的 Web API 项目时,Visual Studio 将创建一个新的 ASP.NET 应用程序并添加 Web API 特定的模板。 ASP.NET 应用程序可以托管在 Visual Studio 的内置开发服务器(也称为 IIS Express)中。因此,当您点击 F5 时,您基本上是在启动这个将托管应用程序的网络服务器,它会侦听某个端口号。

    您可以在 Windows 任务栏中看到正在运行的开发者服务器图标:

    【讨论】:

    • 它不是在 F5 上构建的,就是这样,但如果你构建它,出于某种原因,是的 IIS 托管它而不运行它。
    • 所以在这种情况下,它可能托管在 IIS 中而不是 IIS Express 中。查看项目设置 - Web 选项卡,其中将包含托管属性。
    • 它正在使用 IIS Express。我只是想知道为什么当我不运行应用程序时我仍然可以调用它的函数。
    • 如果你按 F5 一次,它将启动网络服务器。然后你不再需要按 F5 来工作。仅在本地重新编译,IIS Express 会获取您所做的更改。如果您关闭 Visual Studio 并重新打开项目,则不会有 IIS Express 正在运行和侦听您的应用程序。只需在 Windows 任务栏中查找它的图标即可。
    • 是的,IIS Express 继续在后台运行。因此,只需在 Visual Studio 中重新编译项目,您的更改就会立即在浏览器中显示出来。开发时非常方便。
    【解决方案2】:

    Web API 需要托管,并且它托管在 IIS Express 中,正如 Darin 已经说过的,在您运行 ProductsApp 项目的那一刻。您可以在此处阅读有关 IISExpress 的更多信息 [1]。

    但是,您的问题来自这样一个事实:一旦您运行项目,浏览器会打开默认路径(http://localhost:47503/ 在可能的情况下,在您的机器上使用不同的端口),该路径未映射。

    您需要做的是:在 Visual Studio 中运行应用程序,然后向在浏览器中打开的默认路径添加项目中存在的实际路径(例如:/api/products)。因此,您生成的 URL 将类似于:http://localhost:47503/api/products。这在你提到的例子[2]中也有说明,但可能不够清楚。

    [1]https://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-overview

    [2]https://forums.asp.net/t/1961303.aspx?HTTP%20Error%20403%2014%20Forbidden%20

    【讨论】:

    • 它确实返回了一个 json 文件,但是为什么如果我不运行应用程序,我仍然可以调用它的函数,这是我的主要问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2017-02-13
    • 2017-05-08
    相关资源
    最近更新 更多