簡體   English   中英

ASP.NET MVC 找不到我的控制器方法

[英]ASP.NET MVC can't find my controller method

我有一個帶有 Reset 方法的 UserController:

/// <summary>
/// Resets the current user context.
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult Reset()
{
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.ActiveCaseID); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.ActiveEventID); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.CompanyID); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.ConnectionString); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.ImpersonateUserToken); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.LoginID); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.LoginName); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.MultiSystem); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.ServerName); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.SystemID); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.UserID); } catch { }
    try { IAppContext.ClientStateManager.RemoveValue(CookieName.UserName); } catch { }

    LogSecurityEvent(SecurityLogType.InvokedReset);

    return Content("Reset Completed");
}

然而,出於某種原因,當我導航到適當的 URL 時,找不到此方法(或任何其他方法)(我收到 404 錯誤),例如https://localhost:31503/User/Reset 我在這台 PC 上沒有 SSL 證書,但是 Web 應用程序確實可以在我的另一台 PC 上運行,而且我那里也沒有,除非我很久以前設置了一個並忘記了它; 我現在無法訪問那台 PC 進行檢查,我什至不知道去哪里查看。 如果我轉而訪問http://localhost:31503/User/Reset ,該應用程序只會掛起一段時間,然后我會收到“連接已重置”瀏覽器錯誤。 當我附加調試器並將其設置為中斷所有 .NET 異常時,我沒有看到任何異常被吞下。

這是我的RouteConfig類 - 很好很簡單,雖然我對路由不太了解,但它看起來並不復雜......

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

編輯:哦,一些相關的上下文:今天早上用戶/重置操作是“工作”(至少,顯示預期的消息),但實際登錄不是; 它給了我一個空白頁。 當我附加調試器時,我發現一個名為AppContext的類正在吞下異常,該類跟蹤數據庫連接字符串等:

public string ConnectionString
{
    get
    {
        lock (_Lock)
        {
            if (String.IsNullOrEmpty(_connectionString))
            {
                object raw = ClientStateManager.GetValue(CookieName.ConnectionString);
                if (null != raw)
                {
                    _connectionString = raw.ToString().FromEncryptedBase64();
                }
            }
            return _connectionString;
        }
    }
}

因此,如果 cookie 不存在,應用程序將無法找到任何連接字符串並在嘗試連接到數據庫時崩潰! 我以前不知道這是如何工作的; 在我看來,不可能有任何新用戶登錄。然后我在if語句之后添加了這些行來修復它:

else
{
    _connectionString = ConfigurationManager.ConnectionStrings["Root.Properties.Settings.myapp_configConnectionString"].ConnectionString.FromEncryptedBase64();
}

但是現在我到處都是這些 404 錯誤。 這是 web.config 中的相關行:

<add name="Root.Properties.Settings.myapp_configConnectionString" connectionString="(an encrypted connection string is here)" providerName="System.Data.SqlClient" />

FromEncryptedBase64只是一個擴展方法,它采用 base 64 字符串,對其進行解碼,然后對其應用解密算法; 這是一種將連接字符串安全地存儲在 web.config 中的方法,而不必以純文本形式存儲它們。

我的版本評論是這樣我就可以解決您的 SSL 證書,因為 Core 有一個內置工具(也許 4.x 也是如此,但我有一段時間沒有使用它了)。

您可能只需要添加一個特定的路由,因為此方法不需要像默認路由所需的id 您可以通過以下兩種方式之一執行此操作:

選項1

// add an explicit route
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "UserReset",
            url: "User/Reset"
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

選項 2

// attribute based routing in the controller
[HttpGet]
[Route("User/Reset")]
public ActionResult Reset()
{
// your code
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM