문제

이 라우팅을 내 WebApiconFig

에 설정했습니다.
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    }
.

및 /api/productcontroller.cs

에있는이 방법
    public object GetProduct(int id)
    {
        var productRepo = new ProductRepository(db);
        var product = productRepo.GetItem(id);
        return product.ToAnonymousType();
    }

    public object GetTest()
    {
        var productRepo = new ProductRepository(this.db);
        var product = productRepo.GetItem(10000);
        return product.ToAnonymousType();
    }
.

i / product / getProduct / 10000을 요청할 수 있고 JSON을 뒤로 가져올 수 있습니다.

i가 / api / product / gettest를 요청하면 404

iTest에서

를 변경하면

public object GetTest(int id)
.

및 요청 / API / PRODUCT / GETTEST / 10000 JSON을 얻습니다.

404가 일어나고 있는지 전혀 모른다.요청을 정상적으로 처리하는 다른 컨트롤러 (비 API 요청의 경우)가 있습니다.나는 몇 년 동안 웹 폼을 마친 후 MVC에 새로운 것이며, 이것은 나를 괴롭 혔습니다.참고로, 여기 내 routeconfig

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
.

및 my application_start

    protected void Application_Start()
    {
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
.

도움이 되었습니까?

해결책

이것은 노선의 순서로 인한 것입니다.

RouteConfig.RegisterRoutes(RouteTable.Routes);
.

전에 호출됩니다.
GlobalConfiguration.Configure(WebApiConfig.Register);
.

및 registerRoutes 메서드에는 기본 (및 매우 일반적인) 경로가 들어 있습니다

url: "{controller}/{action}/{id}"
.

이 일반 (기본값) 규칙은

의 URL 패턴과 일치합니다.
api/product/gettest
.

WebApi 경로가 일치 할 수있는 기회가 발생합니다.

필요하지 않은 경우 해당 슈퍼 일반 경로를 없애거나 더 많은 특정 경로를 사용하거나

에 호출을 이동할 수 있습니다.
GlobalConfiguration.Configure(WebApiConfig.Register);
.

를 호출하기 전에 올 수 있습니다.
RouteConfig.RegisterRoutes(RouteTable.Routes);
.

global.asax.

나는 당신이 주신 모든 정보가있는 샘플을 만들었고, 그 전화를 움직이는 핸들이 잘 움직입니다. 나는 이것이 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top