im试图设置Fetch API,该API应该在服务器端调用方法。
JavaScript
fetch("/Admin/Server/ac0a45b9-3183-45c9-b4fc-65e37679f1110?handler=StartServer", {
method: "get",
headers: {"Content-Type": "application/json"},
credentials: 'include'
}).then(response => {
if (!response.ok) {
throw response;
}
return response.json();
}).then(() => {
console.log("Done");
});
服务器类
private readonly ServerManager ServerManager;
[BindProperty]
public Data.Server.Server Server { get; set; }
public ServerViewModel(ServerContext context, UserContext userContext) {
this.ServerManager = new ServerManager(context, userContext);
}
public async Task<IActionResult> OnGetAsync(string serverId) {
if (string.IsNullOrEmpty(serverId)) {
return NotFound();
}
this.Server = await ServerManager.GetServerAsync(serverId);
return Page();
}
public async Task<JsonResult> OnGetStartServer() {
// all objects here are null
return await this.ServerManager.StartServer(this.Server.serverId); // throw npe
}
javascript方法调用OnGetStartServer方法并引发以下错误:“对象引用未设置为对象的实例”
所有对象都为空-如何解决而无需重新初始化?
问候 蒂莫
答案 0 :(得分:0)
实例化页面模型并随每个请求进行处理。因此,在属性,字段等上设置的所有内容在请求结束时都会消失。无论是什么代码初始化成员,都必须为每个需要使用它的处理程序(无论是简单还是简单)运行。
如果您需要保留先前用于创建它的类似serverId
之类的东西,则可以使用Session
,然后在下一个请求时将其从Session
中提取出来。重新初始化您的Server
成员。例如:
public async Task<IActionResult> OnGetAsync(string serverId) {
if (string.IsNullOrEmpty(serverId)) {
return NotFound();
}
HttpContext.Session.SetString(ServerIdKey, serverId);
return Page();
}
public async Task<JsonResult> OnGetStartServer() {
var serverId = HttpContext.Session.GetString(ServerIdKey);
if (serverId == null)
{
// Do something, like redirect to a page where the serverId can be set by the user or whatever
}
return await this.ServerManager.StartServer(serverId);
}