首页 > 解决方案 > Azure 处理自定义 HTTP 401

问题描述

我有一个具有基本身份验证(通过自定义数据库签入代码)的 Web 服务,当用户凭据错误时返回 HTTP 401 + SOAP FAULT 消息。这适用于我的本地 IIS 7,但不适用于 Azure ......

当我通过应用服务将其移动到 Azure 并插入错误凭据时,我总是收到以下消息:

HTTP 401 
"You do not have permission to view this directory or page.".

但我想要 SOAP Fault 格式的自定义错误消息!

经过数小时的研究,我发现如果我的代码返回带有 HTTP 401 状态的响应,Azure 会像上面的消息一样将其翻译给最终用户,而忽略我的自定义错误消息。

我用“hello world”SOAP 端点做了另一个例子:

    [WebMethod]
    public string HelloWorld()
    {
        HttpContext.Current.Response.StatusCode = 401;
        return "Hello world";
    }

在我的本地 IIS 中,我得到了 HTTP 401“Hello world”,但是当我将它部署到 Azure 时,我得到了相同的“你没有权限......”

¿ 如何禁用/避免/躲避 Azure 401 消息转换并返回我自己的自定义错误消息 (SOAP FAULT)?

注意:我已经尝试在 Azure 应用服务中禁用身份验证,启用“允许匿名请求”等。

解决方案

问题出在 IIS 中。将以下行添加到我的 web.config 中。

<httpErrors existingResponse="PassThrough" />

更多信息:https ://stackoverflow.com/a/47307706/3763467

我将为面临相同问题并认为问题出在 Azure 的其他人保留相同的标题/标签。

标签: asp.netazureazure-web-app-service

解决方案


听起来您的 web.config 文件可能已设置为启用了自定义错误。

您能否检查您的 web.config 文件并将客户错误设置为开启?

<customErrors="off" />

推荐阅读