c# - dnn WebApi - DnnAuthorize 方法不起作用?

标签 c# dotnetnuke asp.net-web-api

我使用 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/

相关文章:

c# - 为什么我不需要引用 "System.dll"来使用 "System"命名空间?

c# - 我的方法中有多少个线程?

authentication - 在两个不同的 DotNetNuke 安装之间共享用户

asp.net - jQuery 与 DotNetNuke 一起使用时出现问题

asp.net - 如何使用 Rest Angularjs 将集合发布到 Web Api

c# - 'Microsoft.ACE.OLEDB.14.0' 提供者未在本地机器上注册

c# - 使用 LINQ 和委托(delegate)执行递归函数

opencv - 如何使用 catkin 将 OpenCV 3.4.5 dnn 模块与自定义 cv_bridge 链接?错误:未定义的引用 cv::dnn:experimental_dnn_v2::Net::Net()

asp.net-web-api - 随着 SerilogWeb.Owin 停止,是否有 "official"集成?

c# - 从模型验证中排除一个类型(例如 DbGeography)以避免 InsufficientExecutionStackException