【问题标题】:ASP.NET MV6, WEB API, ENTITY 7 Controller not executingASP.NET MV6、WEB API、ENTITY 7 控制器未执行
【发布时间】:2016-04-07 06:10:54
【问题描述】:

我遇到的问题是,当我尝试从 URL 栏运行我的控制器方法时,例如localhost://5000/api/course/GetCourseById/1 没有执行,页面刷新到启动“欢迎-您的ASP.NET 5应用程序已成功启动”页面。

请看下面的代码和屏幕截图。

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using School.Context;
using School.Services;
using School.Interfaces;
using School.Models;
using Microsoft.Extensions.Configuration;
using Microsoft.Data.Entity;

namespace School
{
    public class Startup
    {
    public static IConfiguration Configuration { get; set; }

    public Startup (IHostingEnvironment env)
    {
        //setup configuration sources
        Configuration = new ConfigurationBuilder()
       .AddJsonFile("config.json")
       .AddEnvironmentVariables()
       .Build();
    }

    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        //add services to container
        services.AddEntityFramework().AddSqlServer().AddDbContext<SchoolDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
        services.AddMvc();

        //resolve dependency injections
        services.AddScoped<IRegistrationRepo, RegistrationRepo>();          
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
        app.UseIISPlatformHandler();
        app.UseMvc();
        app.UseWelcomePage();
    }

    // Entry point for the application.
    public static void Main(string[] args) => WebApplication.Run<Startup>(args);
   }
}

CourseController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using School.Interfaces;
using School.Models;

// For more information on enabling Web API for empty projects, visit      http://go.microsoft.com/fwlink/?LinkID=397860

namespace School.Controllers
{
 [Route("api/[controller]")]
public class CourseController : Controller
{
    private IRegistrationRepo _registrationRepo;

    public CourseController(IRegistrationRepo registrationRepo)
    {
        _registrationRepo = registrationRepo;
    }

    [HttpGet]
    public IEnumerable<Course> GetAllCourses()
    {
        return _registrationRepo.GetCourses();
    }

    [HttpGet("{courseId:int}", Name = "GetCourseById")]
    public IActionResult GetCourseById(int courseId)
    {
        var course = _registrationRepo.GetCourse(courseId);
        if (course == null)
        {
            return HttpNotFound();
        }

        return new ObjectResult(course);
    }

   }
 }

【问题讨论】:

    标签: asp.net-web-api asp.net-core asp.net-core-mvc asp.net-web-api-routing entity-framework-core


    【解决方案1】:

    看看你的路由定义

    [HttpGet("{courseId:int}", Name = "GetCourseById")]
    

    网址模板中没有写GetCourseById。所以通过上面的路由定义,它将适用于请求 url http://yoursitename/api/Course/1

    如果您不希望它适用于 yoursitename/api/course/GetCourseById/1 ,您应该更新此操作方法的路由定义,例如。

    [HttpGet("GetCourseById/{courseId:int}")]
    public IActionResult GetCourseById(int courseId)
    {
        return Content("Do something useful for " + courseId);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 2016-07-12
      • 1970-01-01
      • 2013-06-23
      • 2018-10-04
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多