2016-04-05 17 views
0

Bu bir milyon kez soruldu ancak ....WebAPI sunucuda 404 vererek

WebAPI sahibim. IIS'yi çalıştıran yerel makinemde çalışır. Ancak sunucuya konuşlandırdıktan sonra başarısız olur.

şeyler denedim:

Yükledi

<modules runAllManagedModulesForAllRequests="true"> 

Seti işleyicileri

<remove name="WebDAV" /> 
    <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" /> 

MIME türü olarak json ekle

<staticContent> 
    <mimeMap fileExtension=".json" mimeType="application/json" /> 
</staticContent> 

Yönlendirme

0 olarak eşleştirilmiş
// Web API routes 
     config.MapHttpAttributeRoutes(); 

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

Başlangıç ​​dosyası:

public static class WebApiConfig 
{ 
    /// <summary> 
    /// Register the WebAPI. Remove Xml formatter (OPnly using JSON). Add filters. Set Routing 
    /// </summary> 
    /// <param name="config"></param> 
    public static void Register(HttpConfiguration config) 
    { 
     //Enable cross origin requests 
     var cors = new EnableCorsAttribute("http://local.isos.com,htt://dev.isos.mydelphic.com,http://qa.isos.mydelphic.com,http://localhost/", headers: "*", methods: "*"); 
     config.EnableCors(cors); 

     // Web API configuration and services 
     // Remove the XML formatter 
     config.Formatters.Remove(config.Formatters.XmlFormatter); 

     var json = config.Formatters.JsonFormatter; 
     json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 

     config.Filters.Add(new UnhandledExceptionFilter()); 

     config.MessageHandlers.Add(new CacheCow.Server.CachingHandler(config)); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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


    } 

Update2

:

public static void ConfigureContainer(IAppBuilder app) 
    { 
     var builder = new ContainerBuilder(); 

     var options = CreateCorsOptions(); 
     app.UseCors(options); 

     // Get your HttpConfiguration. 
     config = new HttpConfiguration(); 

     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     WebApiConfig.Register(config); 

     RegistererWebApi(builder, config); 

     // Register dependencies, then... 
     var container = builder.Build(); 
     var webApiResolver = new AutofacWebApiDependencyResolver(container); 
     GlobalConfiguration.Configuration.DependencyResolver = webApiResolver; 

     // Register the Autofac middleware FIRST. This also adds 
     // Autofac-injected middleware registered with the container. 
     app.UseAutofacMiddleware(container); 
     app.UseAutofacWebApi(config); 
     app.UseWebApi(config); 

    } 

private static void RegistererWebApi(ContainerBuilder builder, HttpConfiguration config) 
    { 
     // Register your Web API controllers. 
     builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

     // OPTIONAL: Register the Autofac filter provider. 
     //builder.RegisterWebApiFilterProvider(config); 
    } 

GÜNCELLEME

İşte benim tam WebApiConfig olduğunu İşte

Ben AutoFac

private static void RegistererWebApi(ContainerBuilder builder, HttpConfiguration config) 
    { 
     // Register your Web API controllers. 
     builder.RegisterApiControllers(Assembly.GetExecutingAssembly());    
    } 

ile benim denetleyicileri kayıt nasıl İşte benim denetleyicisi geçerli: Size Owin değil eski tarzı singleton GlobalConfiguration kullandığınız görünür

[RoutePrefix("providers")] 
public class ProviderController : BaseApiController 
{ 
    /// <summary> 
    /// Constructor 
    /// </summary> 
    /// <param name="requestDispatcher">Dispatcher gets injected by Ioc</param> 
    public ProviderController(IRequestDispatcher requestDispatcher) 
     : base(requestDispatcher) 
    { } 

    /// <summary> 
    /// Get a list of all providers outside the Philipines 
    /// </summary> 
    /// <returns>Returns an action result regarding the state of the request. Returns a 200 containing the list of providers. Returns a 404 is no results are found.</returns> 
    [Route("",Name="Providers")] 
    public async Task<IHttpActionResult> Get(string sort = "ProviderName", int page = 1, int pageSize = 10) 
    { 
     var query = new GetProviders(); 
     // Populate the view model by calling the appropriate handler 
     var providers = await RequestDispatcher.DispatchAsync<GetProviders, ProvidersResponse>(query); 
     if (providers == null) 
     { 
      return NotFound(); 
     } 

     var totalCount = providers.Count; 
     var totalPages = (int)Math.Ceiling((double)totalCount/pageSize); 

     var urlHelper = new UrlHelper(Request); 

     //Route name 
     var prevLink = page > 1 ? urlHelper.Link("Providers", 
     new 
     { 
      page = page - 1, 
      pageSize = pageSize, 
      sort = sort 
     }) : ""; 

     var nextLink = page < totalPages ? urlHelper.Link("Providers", 
     new 
     { 
      page = page + 1, 
      pageSize = pageSize, 
      sort = sort 
     }) : ""; 


     var paginationHeader = new 
     { 
      currentPage = page, 
      pageSize = pageSize, 
      totalCount = totalCount, 
      totalPages = totalPages, 
      previousPageLink = prevLink, 
      nextPageLink = nextLink 
     }; 

     HttpContext.Current.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader)); 

     return Ok(providers); 
    } 
} 
+0

nasıl tanımlıyorsanız rotayı? WebApiConfig.Register'da –

+0

. Ve ben sadece özellik rotalarını kullanıyorum. –

+0

API hangi/nasıl/türünde çağırıyor? – EdSF

cevap

0

Bir yapılandırma ayarı yapıldı. Hala IIS7 çalışan rağmen, eski bir sunucu sunucu üzerinde, açıkça bir Owin başlatmak sınıfa aramaya IIS söylemek gerekir:

<appSettings> 
    <add key="owin:appStartup"   vaue="yourproject.startup" />  
</appSettings>