ASP.NET MVC 응용 프로그램에 웹 API 기능을 추가했으며 특성 라우팅을 사용하려고합니다. Visual Studio 2015에서 사이트를 실행할 때 브라우저 주소 표시 줄에 URL을 입력하고 컨트롤러에서 메서드를 가져와 작업 할 수 있습니다. 일단 사이트를 IIS로 옮기면 404 답변을 얻을 수 있습니다. 행운을 빌어 많은 코드 변경을 시도했습니다.웹 API 특성 라우팅 작업 방법
BuilderApiController
파일은 WebAPI/v1/Controllers 폴더에 있습니다. 컨트롤러의 속성이 여기에 있습니까?
namespace Hds.Edsi.WebAPI.V1.Controllers
{
[System.Web.Http.RoutePrefix("api/v1/builder")]
public class BuilderApiController : BaseApiController
{
[System.Web.Http.Route("GetExternalOrganizationID/{envisionOrgID}")]
[System.Web.Http.HttpGet]
public HttpResponseMessage GetExternalOrganizationID(string envisionOrgID)
{
WebApiConfig.cs
파일. 표준 재료. 속성 라우팅을 사용하는 경우 config.Routes.MapHttpRoute
부분이 필요합니까? 나는 그것을 시도해 보았다.
내가 필요한 경우 config.MapHttpAttributeRoutes()
의 목적은 무엇입니까? 레지스터가 호출 된 후 GlobalConfiguration
, Configuration._routes
을 보면 속성 라우팅 정의 경로가 없습니다. 그들은 있어야합니까?
namespace Hds.Edsi.WebAPI
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
/*
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
*/
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Components.Automapper.CreateMaps();
// Requrired for managing AppDomain teardown - IRegisteredObject
MonitorManager.RegisterInstance();
}
IIS 익스프레스 :
http://localhost:8181/api/v1/builder/GetExternalOrganizationID/123.123.123.123.1234
내가 기대로 JSON 개체를 반환합니다.
는 IIS :
http://my server/api/v1/builder/GetExternalOrganizationID/123.123.123.123.1234
내가 여기에 간단하게 뭔가를 놓치고 또는 라우팅 작업 특성을 이해하지 않는 것이 추측하고 404
를 반환합니다. 내가 아는 한 당으로 그것이 당신의 IIS에서 제대로 작동하지 않는 경우
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
</handlers>
</system.webServer>
web.config에서 system.webServer 섹션을 추가했습니다. 내가 링크 한 기사 당 OK입니다. – DaveB
그래서, 뭐라구? 이 작업이 현재 또는 동일한 문제가 있습니까? –
URL에 슬래시를 추가하면 모두 작동합니다. 매개 변수의 점으로 인해 IIS가 404와 같은 파일에 매핑하려고 시도했습니다. 마지막에 슬래시를 사용하면 IIS에서 특정 파일이 아니라는 것을 IIS에 알리면 라우팅이 작동합니다. – DaveB