[英]ASP.Net MVC can't find a namespace that is not included in the controller
[英]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.