我已经在Visual Studio Code中创建了一个新的.NET Core WebAPI项目。所有依赖项已还原。该项目正在使用以下SDK和运行时:
我的控制器类(包括Intellisense视图的屏幕截图):
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
namespace Gmn.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
public MyController() {
}
}
}
Run Code Online (Sandbox Code Playgroud)
生成错误:
错误CS0246:找不到类型或名称空间名称“ ApiControllerAttribute”(您是否缺少using指令或程序集引用?)
该Route属性(也位于Microsoft.AspNetCore.Mvc程序集中)可以正确解析,没有错误。所以,我知道程序集已经存在。
根据MS Docs,该程序集定义了该属性:
经过3个小时的搜索,我仍无法弄清楚。我是.NET Core的新手,但不是.NET。
有什么建议可以解决这个问题吗?谢谢。
我正在使用 ASP.NET Core Web API。我很难实例化一个使用 DI 的非控制器类。有很多与此相关的文章,但没有一篇文章回答了我的问题(据我所知)。这些是最受欢迎和相关的:
我的用例(一个人为的例子):
我有一个类SpeechWriter依赖于IRandomTextService:
public class SpeechWriter
{
private readonly IRandomTextService _textService;
// Constructor with Text Service DI
public SpeechWriter(IRandomTextService textService)
{
_textService = textService;
}
public string WriteSpeech()
{
var speech = _textService.GetText(new Random().Next(5,50));
return speech;
}
}
Run Code Online (Sandbox Code Playgroud)
IRandomTextService界面:
public interface IRandomTextService
{
public string GetText(int wordCount);
}
Run Code Online (Sandbox Code Playgroud)
和实施:
public class RandomTextService : IRandomTextService
{
public string GetText(int wordCount)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个 .NET Core 3 WebAPI,我想在其中使用基于自定义策略的授权,其中其中一项策略有多个要求。
我已将策略添加Startup.ConfigureServices()到MyCustomPolicyHandlerDI 中:
public virtual void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("MyCustomPolicy", policy =>
{
policy.Requirements.Add(new RequirementA());
policy.Requirements.Add(new RequirementB());
policy.Requirements.Add(new RequirementC());
policy.Requirements.Add(new RequirementD());
});
services.AddScoped<IAuthorizationHandler, MyCustomPolicyHandler>();
});
}
Run Code Online (Sandbox Code Playgroud)
我已经MyCustomPolicyHandler使用本文档中的示例实现了:
ASP.NET Core 中的基于策略的授权
public class MyCustomPolicyHandler: IAuthorizationHandler
{
public Task HandleAsync(AuthorizationHandlerContext context)
{
var pendingRequirements = context.PendingRequirements.ToList();
Console.WriteLine($"MyCustomPolicyHandler: {pendingRequirements.Count} requirements");
foreach (var requirement in pendingRequirements)
{
if(requirement is RequirementA) {
// do stuff to check the requirements
context.Succeed(requirement);
}
else …Run Code Online (Sandbox Code Playgroud) 我正在尝试查询具有多个集合级别和单个级别的多个集合的实体。我正在使用Include()和ThenInclude(),但没有取得太大成功。我发现的示例在同一级别上没有多个集合,并且我没有运气将该技术应用到我的用例中。
这是我的实体的简化说明。带[]的是集合:
Home
Areas[]
Area
Name
Categories[]
Name
Recommendations[]
Subcategories[]
Name
Recommendations[]
Area
Name
Categories[]
Name
Recommendations[]
Subcategories[]
Name
Recommendations[]
Run Code Online (Sandbox Code Playgroud)
我已经走到这一步了:
result = Home
.Include(x => x.Areas)
.ThenInclude(a => a.Categories)
.ThenInclude(c => c.Subcategories)
.ThenInclude(s => s.Recommendations)
Run Code Online (Sandbox Code Playgroud)
然而,这错过了Categories[].Recommendations[]收藏。这是因为有两个同一级别的集合(Recommendations[]和Subcategories[])。
对于构建此查询以便我可以获得所需结果的方法有什么建议吗?
谢谢。