c# - MVC 6 WebAPI FromServices 属性无法编译

标签 c# asp.net asp.net-web-api asp.net-core-mvc

我正在学习本教程:http://www.mithunvp.com/create-aspnet-mvc-6-web-api-visual-studio-2015/

哪个应该是最新的并且应该在 rc2 上工作

信息: 操作系统:Win 10 x64 14257 VS:15 更新 1 DNX: 1.0.0-rc2-16357 clr x86

错误:

CS0592  Attribute 'FromServices' is not valid on this declaration type. It is only valid on 'parameter' declarations.

WebAPI Controller

[Route("api")]
public class WebAPIController : Controller
{
    [FromServices]
    IWebAPIRepository WebAPI { get; set; }

    [HttpPost("Authenticate", Name = "Authenticate")] // /api/Authenticate
    public async Task<IActionResult> Authenticate([FromBody] LoginViewModel model)
    {
        if (model == null)
            return Ok(new { success = false });

        AuthenticationStatus result = await WebAPI.Authenticate(HttpContext.Authentication, model.Email, model.Password, model.RememberMe);

        switch (result)
        {
            case AuthenticationStatus.Success:
                return Ok(new { success = true });

            case AuthenticationStatus.LockedOut:
                return Ok(new { success = false, error = "Locked out" });

            case AuthenticationStatus.Failure:
            default:
                return Ok(new { success = false, error = "Invalid login attempt" });
        }
    }
}

那个教程应该没问题

WebAPIRepository(接口(interface)包含在同一文件中,位置模型文件夹)

public interface IWebAPIRepository
{
    Task<AuthenticationStatus> Authenticate(AuthenticationManager manager, string email, string password, bool rememberMe);
}

public enum AuthenticationStatus
{
    Success,
    LockedOut,
    Failure
}

public class WebAPIRepository : IWebAPIRepository
{
    public async Task<AuthenticationStatus> Authenticate(AuthenticationManager manager, string email, string password, bool rememberMe)
    {
        // ......

        await manager.SignInAsync("Cookies", new ClaimsPrincipal(id));

        return AuthenticationStatus.Success;
    }
 }

最后是 Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddSingleton<IWebAPIRepository, WebAPIRepository>();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseIISPlatformHandler();
        app.UseDeveloperExceptionPage();

        app.UseCookieAuthentication(options =>
        {
            options.LoginPath = "/account/login";
            options.AccessDeniedPath = "/account/forbidden";

            options.AuthenticationScheme = "Cookies";
            options.AutomaticAuthenticate = true;
            options.AutomaticChallenge = true;
        });

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        app.UseStaticFiles();
    }

    public static void Main(string[] args)
    {
        var application = new WebApplicationBuilder()
            .UseConfiguration(WebApplicationConfiguration.GetDefault(args))
            .UseStartup<Startup>()
            .Build();

        application.Run();
    }

有什么问题吗?

最佳答案

所以我想出了解决办法:

IWebAPIRepository WebAPI { get; set; }

public WebAPIController([FromServices] IWebAPIRepository API)
{
        WebAPI = API;
}

希望这对其他人有帮助:))

关于c# - MVC 6 WebAPI FromServices 属性无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292077/

相关文章:

c# - Web API 中的依赖注入(inject)验证

c# - 在 silverlight 中加载文件

asp.net - tfspreview (visualstudio) 可以发布到私有(private) IIS Web 应用程序服务器吗?

javascript - 添加 li 作为 Jquery 的最后一个元素

asp.net-web-api - OData V4修改服务器端$filter

c# - 将 ssl 添加到 webapi...也添加到客户端?

c# 多条件排序

c# - 如何同步这些线程以避免数据损坏?

c# - 使用 C# 的递归菜单生成器

c# - Excel 类似于 asp.net 中 gridview 中的自动筛选器