小编rea*_*kep的帖子

在.NET Core WebApi项目中找不到ApiController

我已经在Visual Studio Code中创建了一个新的.NET Core WebAPI项目。所有依赖项已还原。该项目正在使用以下SDK和运行时:

  • .NET Core SDK 2.1.302
  • Microsoft.AspNetCore。全部2.1.2
  • Microsoft.AspNetCore.App 2.1.2
  • Microsoft.NETCore.App 2.1.2

我的控制器类(包括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)

语法高亮显示找不到ApiController

生成错误:

错误CS0246:找不到类型或名称空间名称“ ApiControllerAttribute”(您是否缺少using指令或程序集引用?)

Route属性(也位于Microsoft.AspNetCore.Mvc程序集中)可以正确解析,没有错误。所以,我知道程序集已经存在。

根据MS Docs,该程序集定义了该属性:

MS Docs for ApiControllerAttribute

经过3个小时的搜索,我仍无法弄清楚。我是.NET Core的新手,但不是.NET。

有什么建议可以解决这个问题吗?谢谢。

c# asp.net-web-api2 visual-studio-code asp.net-core-2.0

6
推荐指数
2
解决办法
7375
查看次数

显式实例化使用 DI 的 C# 类 - 为什么它不起作用?

我正在使用 ASP.NET Core Web API。我很难实例化一个使用 DI 的非控制器类。有很多与此相关的文章,但没有一篇文章回答了我的问题(据我所知)。这些是最受欢迎和相关的:

非控制器的网络核心依赖注入

没有控制器的依赖注入

ASP.NET 5 非控制器 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)

c# dependency-injection asp.net-core asp.net-core-webapi

6
推荐指数
0
解决办法
1359
查看次数

具有多个要求的自定义授权策略在应用于控制器操作时不起作用

我有一个 .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)

authorize-attribute asp.net-core asp.net-core-webapi

3
推荐指数
1
解决办法
1829
查看次数

Include 和 thenInlude 包含多个级别的集合

我正在尝试查询具有多个集合级别和单个级别的多个集合的实体。我正在使用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[])。

对于构建此查询以便我可以获得所需结果的方法有什么建议吗?

谢谢。

entity-framework-core entity-framework-core-2.1

2
推荐指数
1
解决办法
2276
查看次数