【发布时间】:2019-01-15 17:29:37
【问题描述】:
我正在使用 .NETCore 2.1、Entity Framework 和 Razor 页面来创建游戏管理系统。
我在 Microsoft.AspNetCore.Mvc 命名空间中有一个控制器,它连接到第 3 部分 API 并从中检索数据。
控制器有许多不同的方法,它们返回不同的东西,但它们都共享以下代码:
public static GameSystemManager.LoginInfo gamerManagerLogin = new GameSystemManager.LoginInfo()
{
UserKey = "myAPIkey",
Password = "xyzxyz"
};
public static GameSystemManager.GamerLister gamerLists = new GameSystemManager.GamerLister
{
MaxNumberResults = 15,
PageNumber = 0
};
所以一种控制器方法可能如下所示:
public IActionResult GetAllGames(Guid Id)
{
public static GameSystemManager.LoginInfo gamerManagerLogin = new GameSystemManager.LoginInfo()
{
UserKey = "myAPIkey",
Password = "xyzxyz"
};
public static GameSystemManager.GamerLister gamerLists = new GameSystemManager.GamerLister
{
MaxNumberResults = 15,
PageNumber = 0
};
response = GameSystemManager.ListGames(gamerManagerLogin, gamerLists, Id);
return View(response.Results);
}
由于多个控制器和方法使用相同的代码,我决定创建一个基本控制器,并将该代码放在那里,并让其他控制器继承它。
这是我的 BaseController:
public class BaseController : Controller
{
public static GameSystemManager.LoginInfo gamerManagerLogin = new GameSystemManager.LoginInfo()
{
UserKey = "myAPIkey",
Password = "xyzxyz"
};
public static GameSystemManager.GamerLister gamerLists = new GameSystemManager.GamerLister
{
MaxNumberResults = 15,
PageNumber = 0
};
}
我是这样使用它的:
public class GameListController : BaseController
{
public IActionResult GetAllGames(Guid Id)
{
response = GameSystemManager.ListGames(gamerManagerLogin, gamerLists, Id);
return View(response.Results);
}
}
这是我的 appsettings.json:
"GamerManager": {
"UserKey": "myAPIkey",
"Password": "xyzxyz"
},
这是我的 GamerManagerConfig 类:
public class GamerManagerConfig
{
readonly string UserKey = "myAPIkey";
readonly string Password = "xyzxyz";
}
但是,它不起作用。我只是从 API 收到超时错误。它只有在我直接在控制器方法中有代码时才起作用,就像我上面的例子一样。
我认为这可能与初始化有关。也许它需要直接在方法中初始化?我不确定。
任何见解将不胜感激!
谢谢!
【问题讨论】:
-
可能发布不起作用的代码比发布的代码更有帮助!
-
谢谢!我添加了基本控制器
-
@Loofer 我也添加了使用基本控制器的方式。
-
您的登录信息应该在外部配置中(用户机密、环境变量、Azure Key Vault 等),然后您应该将其注入您的控制器。带有您的页码和最大结果的静态也不应该是静态的。最大结果也应该在您的配置中,而页码根本不应该在那里,而应该来自请求。
-
@ChrisPratt 谢谢,但我只是从我的 Razor 页面点击控制器。我将如何传递该信息?再次感谢。
标签: razor asp.net-core entity-framework-6 asp.net-core-mvc