【问题标题】:CORS related issue in production release Outlook Web Addin生产版本 Outlook Web 插件中的 CORS 相关问题
【发布时间】:2019-01-29 17:51:42
【问题描述】:

我有一个 Outlook Web 插件。在 本地(调试环境) 中测试时,它可以正常工作,但是当 Web API 已发布到生产环境 并且 Outlook 插件尚未发布到生产环境 ( Outlook 商店),我收到 CORS 相关问题,发出请求时返回的 错误代码404 并且返回的错误消息是对预检的响应没有 HTTP ok 状态

我在 Web API 本地(未发布到生产环境) 中遇到了类似问题,但我能够通过添加以下代码来修复它

在 Web Config 文件中(服务器端)

<location path="api/v1/plugin">
  <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, Token, Key" />
          <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, OPTIONS" />
          <add name="Access-Control-Max-Age" value="3600" />
          <add name="Access-Control-Allow-Credentials" value="true" /> 
        </customHeaders>
      </httpProtocol>
  </system.webServer>

在 HTTP 选项的 Web API 控制器更改中

[HttpOptions]
    [Route("login")]

    public void EnableCors()
    {
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.OK;
        }
    }

在客户端(Outlook 插件)中,我使用 Ajax 来调用 Web API。

 $.ajax({
                type: "POST",
                url: call,
                async: false,
                headers: {
                    'Token': token, 'Key': keyVal
                },
                contentType: "application/javascript",
                beforeSend: function (xhr) {
                     xhr.withCredentials = true;
                },
                crossDomain: true,
                success: function (data, status, jqXHR) {
                   createRoamingSetting('apiData',JSON.stringify(data));
                },
                error: function (jqXHR, status, err) {
                      triggerAlert("error", err.message);
                }
   });

当包含上述两个代码时,它在调试版本中运行良好。我能够向 Web API 发出请求(未发布 - localhost)。但是当 Web API 发布到 Production 时,对 Web API 的请求返回 404 错误。

下面是我在生产版本中遇到的错误的屏幕截图。

任何帮助将不胜感激:)

【问题讨论】:

  • 您是否在服务初始化过程中沿路径某处调用了HttpConfiguration.EnableCors 方法?你的路由代码说login,但你的网络配置部分说plugin
  • 您看到的错误是插件特有的吗?您是否尝试过从浏览器进行相同的 Web API 调用?
  • @NoRefundsNoReturns :不,我没有调用 HttpConfiguration.EnableCors 。但是,自从 SIT 在 localhost 上工作以来,这些更改不应该在 SIT 中工作吗?配置更改似乎是正确的,因为除了登录 ex 之外,我们还有多个路由值:api/v1/plugin/login 或 api/v1/plugin/refresh。所以 应该适用于 api/v1/plugin/login 和 api/v1/plugin/refresh。即使我在配置文件中将路径指定为 api/v1/plugin/login,我也会收到相同的错误。如果我错了,请纠正我。
  • @OutlookAdd-insTeam-MSFT :API 似乎工作正常。由于这是一个 POST,我无法在浏览器中获取有效数据,但这在其他客户端中可以正常工作。

标签: ajax asp.net-web-api cors outlook-addin office-js


【解决方案1】:

也许您应该在 system.webServer > 处理程序的 web.config 中添加 &lt;remove name="OPTIONSVerbHandler" /&gt;。如果存在,则在 IIS 中的请求过滤器中检查 HTTP 动词,您需要删除 OPTIONS。这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2023-03-15
    • 1970-01-01
    • 2021-08-06
    • 2019-05-22
    • 2010-12-10
    • 2020-09-16
    • 2018-11-14
    相关资源
    最近更新 更多