我使用 web api 在 dnn 服务框架中创建了以下简单的 ping 方法。
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage Ping()
{
return Request.CreateResponse(HttpStatusCode.OK, "Pong!");
}
现在这可以很好地从浏览器调用。如果然后尝试更改为此
[DnnAuthorize]
[HttpGet]
public HttpResponseMessage Ping()
{
return Request.CreateResponse(HttpStatusCode.OK, "Pong!");
}
我在浏览器中收到弹出的用户名和密码请求。每次我输入详细信息时,登录框都会重新出现,好像是错误的。
我也试过 [DnnAuthorize(StaticRoles="Administrators")]
但效果一样。
然后我下载了 Dnn Dash 服务源并加载了桌面应用程序项目。替换了以下行
string url = DnnRequest.GetUrl(credentials.HttpAlias, "DnnDash_SimpleDashboard", "Dash", "PingHost", false);
与
string url = DnnRequest.GetUrl(credentials.HttpAlias, "RegisterService", "Register", "Ping", false);
这样它就可以在我的服务中使用上述方法。运行项目会导致 500 错误。
知道我为什么做错了吗?
编辑 1
我将 dnn dash 服务上传到我的站点,然后运行桌面应用程序。仍然是同样的问题,所以我知道至少这不是我的服务。
编辑 2
我清除了我的 dnn 日志,然后运行了几次桌面应用程序。回到日志并打开新创建的文件。找到以下几个与我运行桌面应用程序相匹配的条目。
[Thread:99][FATAL] DotNetNuke.Web.Common.Internal.DotNetNukeHttpApplication - System.Configuration.ConfigurationErrorsException: Password Retrieval is not enabled
at System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result)
at System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
编辑 3
好的,EDIT 2 中的错误似乎是在您使用散列密码设置 dnn 站点时引起的。我切换到加密密码,现在我收到服务的回复“未授权”。只需要弄清楚为什么管理员日志记录未被授权。
注意:从散列密码切换到加密密码时,这只会影响新用户。对于现有用户,您需要运行 SQL 脚本来更新密码格式,并且需要重置密码。
最佳答案
我知道这个问题很老,但我遇到了类似的问题并且能够正确解决。 要根据请求授权管理员,您不能简单地传递一个字符串。原因是每个 dnn 实例很有可能管理员角色有不同的名称,例如“Administrators”、“Administrator”(没有“s”)等。要解决这个问题,请这样写:
[HttpDelete, DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)]
如果您需要在代码的其他地方访问此角色名称,您可以使用此代码段。
private string GetAdminRoleName()
{
return PortalSettings.AdministratorRoleName;
}
希望对某人有所帮助。抱歉,这是一个迟到的回复。
关于c# - dnn WebApi - DnnAuthorize 方法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127602/