gpt4 book ai didi

c# - Servicestack SOAP - 无效凭据返回 html 作为响应

转载 作者:行者123 更新时间:2023-11-30 21:39:59 25 4
gpt4 key购买 nike

在我的服务中,我有一个自定义身份验证提供程序,如果凭据无效,它会抛出一个 HttpError,如下所示:

throw HttpError.Unauthorized("Invalid Username or Password");

当我通过 REST 访问此服务并故意输入无效凭据时,我得到了预期的响应:

{
"ResponseStatus": {
"ErrorCode": "Unauthorized",
"Message": "Invalid UserName or Password",
}
}

但是,通过 SOAP 客户端执行相同的操作时,我从 IIS 服务器收到了一个 Html 响应:

enter image description here

这会导致我的 SOAP 客户端中断,因为它无法反序列化响应。如果请求中包含不正确的数据值,也会发生这种情况,例如在整数参数上设置字符串值。如果我正在处理请求的服务之一发生异常(即抛出 HttpError.NotFound),则响应很好。我知道类似的问题已经得到回答here但它自 2013 年以来就没有更新过。有没有办法配置响应或覆盖它?

编辑 1

我已经将我的 web.config 更新为如下所示(在 system.webServer 中,我不得不使用“modules”而不是“httpModules”):

<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<httpModules>
<add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" />
</httpModules>
<httpHandlers>
<add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" />
</modules>
<urlCompression doStaticCompression="true" doDynamicCompression="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>

我的 AppHost 具有以下内容:

SetConfig(new HostConfig
{
HandlerFactoryPath = "/api"
});

SuppressFormsAuthenticationRedirectModule.PathToSupress = Config.HandlerFactoryPath;

但是我仍然遇到和以前一样的错误。我想知道这是否是因为我在每个请求中都将凭据作为 header 传递,而不是首先专门进行身份验证?值得指出的是,同样的错误发生在例如在整数参数上设置字符串。

编辑2

这个解决方案确实有效。我定义了不正确的 HandlerFactoryPath:

SetConfig(new HostConfig
{
HandlerFactoryPath = "api"
});

最佳答案

蓝屏死机是ASP.NET劫持未授权错误响应的错误响应的结果。你可以prevent ASP.NET from hijacking the Error Response使用 SuppressFormsAuthenticationRedirectModule

首先您需要在您的 web.config 中注册 HTTP 模块:

<system.web>
<httpModules>
<add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" />
</httpModules>
</system.web>

<!-- Required for IIS 7.0 (and above?) -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<httpModules>
<add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" />
</httpModules>
</system.webServer>

接下来,使用您的 API 所在的位置配置模块 - 默认为/api,因此在您的 AppHost 配置中:

public override void Configure(Funq.Container container)
{
SetConfig(new HostConfig {
HandlerFactoryPath = "api",
});

//this is the configuration for Hijacking prevention
SuppressFormsAuthenticationRedirectModule.PathToSupress = Config.HandlerFactoryPath;
}

关于c# - Servicestack SOAP - 无效凭据返回 html 作为响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com