【发布时间】:2014-06-09 19:35:16
【问题描述】:
我使用 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 脚本来更新密码格式,并且您需要重置密码。
【问题讨论】:
-
那么编辑 2 是否意味着您已经解决了问题?如果没有,请查看this DNN issue。
-
尝试使用 Fiddler 检查请求标头和来自服务器的响应,看看您是否解决了问题。
-
@Gaz83,如果您的编辑描述了您的解决方案,请随时回答您自己的问题。这将是其他用户的有用参考。
-
@SimonMᶜKenzie 不,我只是把它放在那里,这样人们就可以看到我采取的可能对他们有帮助的步骤。
-
@SimonMᶜKenzie 一旦解决,我将创建一个答案。即使我使用的是管理员登录详细信息,我仍然遇到授权问题。
标签: c# dotnetnuke asp.net-web-api