我有一个使用 Blazor Hybrid 的 MAUI 应用程序,并且有一个错误导致它在 iOS 18 测试版中显示空白页。
https://github.com/dotnet/maui/issues/23390
此错误已在最新的 MAUI 服务版本中修复并发布https://github.com/dotnet/maui/releases/tag/8.0.80
但我不知道如何将其放入我的应用程序中。有办法吗?还是我需要等待 dotnet 8 SDK 的下一个版本?
我有一个使用 Blazor Hybrid 的 MAUI 应用程序,并且有一个错误导致它在 iOS 18 测试版中显示空白页。
https://github.com/dotnet/maui/issues/23390
此错误已在最新的 MAUI 服务版本中修复并发布https://github.com/dotnet/maui/releases/tag/8.0.80
但我不知道如何将其放入我的应用程序中。有办法吗?还是我需要等待 dotnet 8 SDK 的下一个版本?
我有一个使用.NET Identity 的 Web 应用程序,它使用标准(基于 cookie)的身份验证。
我有一个用于使用 JWT 身份验证的移动应用程序的单独控制器。
这两者都设置为在中间件中使用,并且一切运行良好。
移动应用程序(使用 .NET MAUI)可以在系统浏览器中打开 URL。我想找到一种方法,让用户在打开某个页面时自动登录到 Web 应用程序(使用 cookie 方案)。
我的想法是,如果我可以打开一个 URL 并在查询字符串参数中传递令牌,?token={token}
那么我就可以识别身份用户并使用它来执行标准_signinManager.SignInAsync(User)
。
但我不知道如何使用从查询字符串获取的 JWT 字符串来查找身份用户。
_userManager.FindByJWT(jwt)
类似或相似的东西。
有任何想法吗?
我有两个需要建立关系的实体。我已经将模型与我的ApplicationDbContext
. 但是,当我尝试对其运行查询以从相关实体获取数据时,我收到此错误。
无法确定“Fixture.Result”和“Result.Fixture”之间的一对一关系的从属方。要识别关系的依赖方,请配置外键属性
我怎样才能让它发挥作用?
我需要可选地Fixture
有一个,但必须有一个。Result
Result
Fixture
夹具.cs
public class Fixture
{
public long Id { get; set; }
public DateTime Date { get; set; }
public League League { get; set; }
public Season Season { get; set; }
public Result Result { get; set; }
//Properties omitted for brevity
}
结果.cs
public class Result
{
public long Id { get; set; }
public League League { get; set; }
public SeasonDivision Division { get; set; }
public SeasonCalendarDate SeasonCalendarDate { get; set; }
public Fixture Fixture { get; set; }
//Properties omotted for brevity
}
应用程序DbContext.cs
builder.Entity<Result>()
.HasOne(i => i.Fixture);
我有一个 .NET 7 应用程序,每天处理几千个用户。在高峰时段,应用程序会消耗其运行的 IIS 服务器上的所有资源。
我知道下一步是容器化和所有这些好东西,但现在我想充分利用我所拥有的东西。我对开发还很陌生,而且没有计算机科学背景,也不能自称完全理解异步或多线程。
例如,我有一个端点,每秒可能被调用大约 300 次。数据库后端是 SQL Server 2019(标准),我使用的是 Entity Framework Code First。它使用 .NET Identity 在这些端点上进行身份验证。
关于如何使这两个片段达到绝对最快的速度,并在不破坏我的服务器的情况下处理最多数量的并发用户的任何建议,以及一个简短的解释,以便我可以在我的应用程序中采用类似的范例。
获取结果
[Route("/mobile/result/{matchtype}/{referenceid}/{lastchecked}")]
public async Task<IActionResult> GetResult(MatchType matchType, long referenceid, string lastchecked)
{
DateTime datetocheck = DateTime.Parse(HttpUtility.UrlDecode(lastchecked));
Result response = new Result();
if (matchType == MatchType.League)
{
response = _context.Results
.Where(i => i.Fixture.Id == referenceid && i.LastUpdated >= datetocheck)
.Select(i => new Result()
{
ReferenceId = referenceid,
MatchType = matchType,
ResultId = i.Id,
HomeFrameScore = i.HomeScore,
AwayFrameScore = i.AwayScore,
HomeHandicap = i.HomeTeam.Handicap,
AwayHandicap = i.AwayTeam.Handicap,
MatchStatus = i.Status
//Set scores for comps
})
.FirstOrDefault();
if (response == null)
return NoContent();
response.Frames = new List<Frame>();
response.Frames = _context.ResultFrames
.Where(i => i.Result.Fixture.Id == referenceid)
.Select(i => new Frame()
{
ResultFrameId = i.Id,
FrameNumber = i.FrameNumber,
HomeBreak = i.HomeBreak,
HomeDish = i.HomeDish,
HomeForfeit = i.HomeForfeit,
HomeLockedIn = i.HomeLockedIn,
HomeScore = i.HomeScore,
AwayBreak = i.AwayBreak,
AwayDish = i.AwayDish,
AwayForfeit = i.AwayForfeit,
AwayLockedIn = i.AwayLockedIn,
AwayScore = i.AwayScore,
Status = i.FrameStatus,
MatchFormatSectionId = i.MatchFormatSection.Id
}).ToList();
var resultframeplayers = _context.ResultFramePlayers
.Where(i => i.Result.Fixture.Id == referenceid)
.Select(i => new FramePlayer()
{
ResultFramePlayerId = i.Id,
Number = i.Number,
ResultFrameId = i.ResultFrame.Id,
Joker = i.Joker,
HomeAway = i.HomeAway,
PlayerId = i.PlayerSeasonTeam != null ? i.PlayerSeasonTeam.Player.Id : 0
}).ToList();
foreach( var rf in response.Frames)
{
rf.HomeFramePlayers = resultframeplayers.Where(i => i.ResultFrameId == rf.ResultFrameId && i.HomeAway == HomeAway.Home).ToList();
rf.AwayFramePlayers = resultframeplayers.Where(i => i.ResultFrameId == rf.ResultFrameId && i.HomeAway == HomeAway.Away).ToList();
}
}
return Json(response);
}
锁定部分
[Route("/mobile/lockinsection")]
[HttpPost]
public async Task<IActionResult> LockInSection([FromBody] FrameResultData data)
{
var user = await _userManager.GetUserAsync(User);
if (data.MatchType == MatchType.League)
{
var checkcaptain = ValidCaptain(data.MatchType, data.ReferenceId);
if (checkcaptain == false)
return BadRequest("Not a valid captain for this match");
var captainhomeaway = CaptainHomeOrAway(data.MatchType, data.ReferenceId);
if (data.LockIn.HomeAway != captainhomeaway)
return BadRequest("Captain locking in for the wrong team");
foreach(var frame in data.LockIn.Frames)
{
var resultframe = _context.ResultFrames
.Include(i => i.Result)
.FirstOrDefault(i => i.Id == frame.ResultFrameId);
if (data.LockIn.HomeAway == HomeAway.Home)
resultframe.HomeLockedIn = LockedIn.True;
if (data.LockIn.HomeAway == HomeAway.Away)
resultframe.AwayLockedIn = LockedIn.True;
_context.Update(resultframe);
}
var result = _context.Results.FirstOrDefault(i => i.Fixture.Id == data.ReferenceId);
result.LastUpdated = DateTime.UtcNow;
_context.Update(result);
_context.SaveChanges();
return Ok();
}
else
{
//Competition
}
return BadRequest();
}