2015-08-11 10 views
8

provo a fare quanto segue nel mio web.config:Owin fornire classe di avvio nel web.config (nessuna scoperta avvio automatico)

<appSettings> 
    <add key="owin:AutomaticAppStartup" value="false" /> 
    <add key="owin:appStartup" value="MyNamespace.MyStartupClass" /> 
</appSettings> 

Se ho capito questo documentation rilevamento avvio correttamente automatica deve essere disattivata. Quindi non ho bisogno di un attributo di avvio.

Purtroppo sembra che OWIN non si avvia. (Vedo questo perché ottengo l'errore:. HTTP Error 403.14 - Forbidden io uso un controller per gestire le richieste al file di indice.)

se uso <add key="owin:AutomaticAppStartup" value="true" /> e aggiungere l'attributo di avvio [assembly: OwinStartup(typeof(MyStartupClass))] quindi l'applicazione non avvio come previsto.

Quindi la domanda è: perché? Cosa posso fare per risolvere il problema?

Sto usando OWIN 3.0.0.0

Aggiornamento:

Questo è come la mia classe di avvio si presenta come (versione minified con parti rilevanti):

using System.Web.Http; 
using Microsoft.AspNet.SignalR; 
using Microsoft.Owin; 
using Owin; 
using MyOtherNamespace; 

namespace MyNamespace 
{ 
    public class MyOnlineStartup : MyOtherStartup 
    { 
     public new void Configuration(IAppBuilder app) 
     { 
      base.Configuration(app); //Call base method! This is important because otherwise ther serilization will not be correct 
      HttpConfiguration config = CreateRouting(); 
      config.Routes.MapHttpRoute("exampleAppNone", "", new { controller = "MyIndex" }, null, null); 
      config.Routes.MapHttpRoute("exampleAppIndex", "index.html", new { controller = "MyIndex" }, null, null); 
      app.UseWebApi(config); // Use the WebAPI technology. 
     } 
    } 
} 

deriva dal

using System.Linq; 
using System.Web.Http; 
using Microsoft.AspNet.SignalR; 
using Newtonsoft.Json; 
using Owin; 

namespace MyOtherNamespace 
{ 
    public class MyOtherStartup 
    { 
     protected static HttpConfiguration CreateMyRouting() 
     { 
      HttpConfiguration config = new HttpConfiguration(); 
      config.Routes.MapHttpRoute(
       "myIndex", 
       "my/", 
       new 
       { 
        controller = "MyIndex" 
       }, 
       null, 
       null 
       ); 
      config.Routes.MapHttpRoute(
       "myIndex2", 
       "my/index.html", 
       new 
       { 
        controller = "MyIndex" 
       }, 
       null, 
       null 
       ); 
      var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); 
      config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 
      config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto 
      return config; 
     } 

     public void Configuration(IAppBuilder app) 
     { 
      JsonSerializer serializer = Serialization.ClientJsonSerializer(); 
      serializer.ContractResolver = new MySerializationContractResolver(false); 
      GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer); 
      app.MapSignalR("/" + MyRequestHandler.MySignalRPath, new HubConfiguration());   
     } 
    } 
} 
+0

Puoi inviare la classe 'MyStartupClass'? –

+0

Quali parti della mia classe sarebbero rilevanti? È abbastanza grande che contiene molte cose che non sono correlate. Vale la pena notare che la mia classe di avvio è derivata da un'altra classe di avvio che risiede in una libreria di classi. – Sjoerd222888

+0

Rimuovi parti irrilevanti Voglio solo vedere la struttura e il contorno della tua classe. –

risposta

17

Basta rimuovere questa riga di codice nel file web.config:

<add key="owin:AutomaticAppStartup" value="false" /> 

Il file web.config ora deve guardare in questo modo:

<appSettings> 
    <add key="owin:appStartup" value="MyNamespace.MyStartupClass" /> 
</appSettings> 

Con l'aggiunta di solo owin:appStartup chiave non è necessario l'attributo di avvio.

+0

È possibile anche rinominare il nome del metodo Configure ..? e come configurarlo in web.config? –

+2

@RahulUttarkar sì è possibile. Basta scrivere il nome del metodo dopo il nome della classe nel valore della chiave 'appSetting'. Ad esempio 'value =" MyNamespace.MyStartupClass.MyMethod "' –