我无法让 SS 身份验证与 Umbraco 安装一起工作。每当我使用 Authenticate 属性访问 DTO 或服务时,我都会被重定向到 umbraco 登录。重现:我创建了一个新项目,并从 Nuget 安装了 Umbraco(尝试了 4.7.1、4.8.1 和 4.9.0,结果相同)和来自 Nuget 的 SS。我将 SS 设置为在 web.config 中的 /api 路径下运行:
<location path="api">
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
</location>
并将 /api 添加到保留路径以避免 Umbraco 处理此问题:
<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/api" />
在 AppHost.cs 中,我更改了 EndpointHostConfig 并启用了身份验证:
SetConfig(new EndpointHostConfig
{
DebugMode = true, //Show StackTraces when developing
ServiceStackHandlerFactoryPath = "api"
});
//Enable Authentication
ConfigureAuth(container);
我已经更改了 ConfigureAuth 中的连接字符串以使用 Umbraco 数据库:
var connectionString = ConfigurationManager.AppSettings["umbracoDbDSN"];
最后我在 HelloWorldService 上设置了属性:
[Authenticate]
public class HelloService : ServiceBase<Hello>
{
protected override object Run(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}
然后我通过 REST Uri 访问 HelloWorldService:
http://localhost:56835/api/hello
我马上被重定向到:
http://localhost:56835/apilogin?redirect=http%3a%2f%2flocalhost%3a56835%2fapi%2fhello
并呈现默认的 Umbraco 404 页面,这意味着 SS 突然让 Umbraco 处理身份验证。如果我删除 Authenticate 属性,SS 会完美地处理请求。
我错过了什么?