Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复DNN Web API从9.0升级到9.2后返回404_C#_Dotnetnuke - Fatal编程技术网

C# 如何修复DNN Web API从9.0升级到9.2后返回404

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/

我有一个运行DotNetNuke 9.0的网站,在升级到9.2之后,突然我的API开始返回404,API上没有任何变化,只有dnn框架

我已经尝试添加和清除缓存,并重新启动应用程序,到目前为止没有任何效果

还检查了SEO URL重写选项,这是我所拥有的:

不要重写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/
不重定向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]告诉我访问被禁止(这是预期的,但我传递了正确的凭据…),我放弃了,并回滚到以前的版本以使其工作。。。