2

尝试对 DNN Web API 控制器进行简单调用时,我反复收到内部服务器错误 500。我在我的开发机器上没有收到此错误,也没有在我们的一台部署服务器上收到此错误。但是,我们的其他部署服务器之一是问题所在;我想弄清楚为什么。

考虑TheBestController.cs中的以下简单 API 控制器

namespace MyTestLibrary.Controllers
{   
    public class TheBestController : DnnApiController
    {
        [DnnAuthorize]
        [HttpPost]
        public HttpResponseMessage TestMe()
        {
            return Request.CreateResponse(HttpStatusCode.OK, "I'm working");
        }

     }
}

在 RouteMapper.cs 中使用这个RouteMapper

using DotNetNuke.Web.Api;

namespace MyTestLibrary
{
    public class RouteMapper : IServiceRouteMapper
    {
        public void RegisterRoutes(IMapRoute mapRouteManager)
        {
            mapRouteManager.MapHttpRoute("TheBestController", "default", "{controller}/{action}",  new[] { "MyTestLibrary.Controllers" });
        }
    }
}

使用来自我的 Javascript 的以下 AJAX 调用:

$.post("DesktopModules/MyTestLibrary/API/TheBest/TestMe", function(data) {
        alert(data);
 });

我已确保为 IIS 中的 DNN 应用程序设置了所有正确的权限(以及镜像这些权限以及我们服务器上具有此功能的所有其他相关设置)。我将编译好的MyTestLibrary.dll放在 DNN 站点的 bin 文件夹中,并将 javascript 文件放在 DNN 站点的 Resources/Shared/scripts 文件夹中。DNN 站点正在毫无问题地读取 javascript,并且我没有使用模块(并且不想使用,因为我希望我的所有代码都可以轻松转移到 MVC 站点)。

我也尝试[AllowAnonymous]在控制器方法上使用标签(无济于事)。

所有机器上的DNN版本都是07.01.01,两台服务器运行Server 2008 R2 64bit。开发机器正在运行 Win 7 64 位。

有任何想法吗?

4

1 回答 1

2

将评论分解为答案;)

我已经看到 Windows Server 2008 上的 IIS 会以某种方式损坏 DNN 网站正在使用的文件夹,这会导致 DNN 中的某些 Web 服务出现问题。我知道过去对我有用的两种解决方案。

1) 在 IIS 中设置一个新站点并在该文件夹中安装 DNN。或 2) 将 DNN 文件移动到服务器上的不同文件夹,将现有 IIS 网站指向该文件夹,而不是原来的文件夹。

这两个中的一个应该有望适用于遇到此问题的大多数人。

现在,IIS 到底出了什么问题,为什么现有文件夹可以修复?没有线索 :(

于 2013-09-20T02:13:29.977 回答