Атрибут веб-API маршрутизации 404? - PullRequest
0 голосов
/ 16 ноября 2018

Кажется, что моя маршрутизация атрибутов в проекте Web API не работает.Я пытаюсь получить доступ:

http://localhost/ControlTower2WebAPI/api/PurchaseOrder/Test/attribute/routing/why/

или

http://localhost/ControlTower2WebAPI/api/PurchaseOrder/Test/attribute/routing/why

Я также пробовал F5 (отладка) в visual studio:

http://localhost:53915/api/PurchaseOrder/Test/attribute/routing/why http://localhost:53915/api/PurchaseOrder/Test/attribute/routing/why/

Ошибки те же:

Ошибка HTTP 404.0 - не найдено Требуемый ресурс удален, имел егоимя изменено или временно недоступно.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*");
        config.EnableCors(cors);

        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

        //set API to return JSON
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
}

Код:

[System.Web.Http.RoutePrefix("PurchaseOrder")]
public class PurchaseOrderController : ApiController
{
    private static ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    [System.Web.Http.Route("Test/attribute/routing/{_input}")]
    public JsonResult TestRoute(string _input)
    {
        try
        {
            JsonResult jsonResult = new JsonResult();
            jsonResult.Data = new
            {
                messageFromParameter = _input
            };
            return jsonResult;
        }
        catch (Exception exception)
        {
            logger.Error("TestRoute", exception);
            throw;
        }
    }
}

Соответствующий (?) Web.config:

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <httpProtocol>
    </httpProtocol>
    <security>
      <requestFiltering>
        <requestLimits maxQueryString="1000000" />
      </requestFiltering>
    </security>
</system.webServer>
...