C# 如何修复DNN Web API从9.0升级到9.2后返回404
我有一个运行DotNetNuke 9.0的网站,在升级到9.2之后,突然我的API开始返回404,API上没有任何变化,只有dnn框架 我已经尝试添加和清除缓存,并重新启动应用程序,到目前为止没有任何效果 还检查了SEO URL重写选项,这是我所拥有的: 不要重写URL正则表达式C# 如何修复DNN Web API从9.0升级到9.2后返回404,c#,dotnetnuke,C#,Dotnetnuke,我有一个运行DotNetNuke 9.0的网站,在升级到9.2之后,突然我的API开始返回404,API上没有任何变化,只有dnn框架 我已经尝试添加和清除缓存,并重新启动应用程序,到目前为止没有任何效果 还检查了SEO URL重写选项,这是我所拥有的: 不要重写URL正则表达式 /DesktopModules/|/Providers/|/LinkClick\.aspx|/profilepic\.ashx| /DnnImageHandler\.ashx|/__browserLink/|/API/
/DesktopModules/|/Providers/|/LinkClick\.aspx|/profilepic\.ashx|
/DnnImageHandler\.ashx|/__browserLink/|/API/|/WebAPI/
(\.axd)|/Rss\.aspx|/SiteMap\.aspx|\.ashx|/LinkClick\.aspx|/Providers/
|/DesktopModules/|ctl=MobilePreview|/ctl/MobilePreview|/API/|/WebAPI/
不重定向URL正则表达式
/DesktopModules/|/Providers/|/LinkClick\.aspx|/profilepic\.ashx|
/DnnImageHandler\.ashx|/__browserLink/|/API/|/WebAPI/
(\.axd)|/Rss\.aspx|/SiteMap\.aspx|\.ashx|/LinkClick\.aspx|/Providers/
|/DesktopModules/|ctl=MobilePreview|/ctl/MobilePreview|/API/|/WebAPI/
目前,我有以下RouteMapper:
using System;
using DotNetNuke.Web.Api;
namespace WebAPI
{
public class RouteMapper : IServiceRouteMapper
{
public void RegisterRoutes(IMapRoute mapRouteManager)
{
mapRouteManager.MapHttpRoute("WebAPI", "default", "{controller}/{action}", new[] { "WebAPI" });
}
}
}
还有我的API控制器的一个例子
using System;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DotNetNuke.Web.Api;
using DotNetNuke.Entities.Portals;
using DotNetNuke.Entities.Users;
namespace WebAPI
{
public class PingController : DnnApiController
{
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage Send()
{
var portalId = PortalController.GetEffectivePortalId(PortalSettings.PortalId);
UserInfo user = PortalSettings.UserInfo;
return Request.CreateResponse(HttpStatusCode.OK, "Ping on portal: " + PortalSettings.PortalId + " You are user: " + user.Username);
}
//Could be [DnnAuthorize(StaticRoles = "Registered Users" )]
[DnnAuthorize]
[HttpGet]
public HttpResponseMessage SendAuth()
{
var portalId = PortalController.GetEffectivePortalId(PortalSettings.PortalId);
UserInfo user = PortalSettings.UserInfo;
return Request.CreateResponse(HttpStatusCode.OK, "Ping on portal: " + PortalSettings.PortalId + " You are user: " + user.Username);
}
}
}
这是正确的吗?我还可以检查什么?您是否检查了事件日志以查看是否有错误
9.0到9.2的升级可能使您接触到一些在9.2版本中删除的不推荐的内容。检查错误可能是一种快速查看是否发生了这种情况的方法。本周,我正在为一个新的开源社区网站#oqtane()解决同样的问题。对我来说,这个问题最终与web.config文件中缺少的引用有关。我不确定引用是如何删除的(可能是通过卸载DNN模块),但最终结果是路由不再启用,这导致jQuery服务调用WebApi方法失败,并出现404错误。您应该检查Modules区域中的web.config文件,以确保包含UrlRoutingModule:
<modules>
...
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler" />
...
...
...
感谢您的建议,在网站本身中,我无法获得任何日志,因为这不是一个实际错误,它只是一个404,因为它无法解析路由器类,我无法看到实际的机器日志,但在plesk面板中,我得到的只是一个404请求。我还在一些ec2实例上干净地安装了DNN9.2,并复制了重写规则。如果我需要研究一些DLL,哪些是重要的?我猜是DotNetNuke.Web.dllHey!谢谢你的意见,我核实过了,我有参考资料。我最终几乎成功了。。。经过很多努力,我让它工作,但[DnnAuthorize]告诉我访问被禁止(这是预期的,但我传递了正确的凭据…),我放弃了,并回滚到以前的版本以使其工作。。。