web-dev-qa-db-fra.com

Owin fournit une classe de démarrage dans web.config (pas de découverte de démarrage automatique)

J'essaie de faire ce qui suit dans mon web.config:

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

Si je comprends cela documentation correctement la détection de démarrage automatique doit être désactivée. Je n'ai donc pas besoin d'un attribut de démarrage.

Malheureusement, il semble que OWIN ne démarre pas. (Je vois cela parce que j'obtiens l'erreur: HTTP Error 403.14 - Forbidden. J'utilise un contrôleur pour gérer les requêtes vers le fichier d'index.)

si j'utilise <add key="owin:AutomaticAppStartup" value="true" /> et que j'ajoute l'attribut de démarrage [Assembly: OwinStartup(typeof(MyStartupClass))] alors l'application démarre comme prévu.

Donc la question est pourquoi? Que puis-je faire pour résoudre le problème?

J'utilise OWIN 3.0.0.0

Mise à jour:

Voici à quoi ressemble ma classe de démarrage (version minifiée avec les parties pertinentes):

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.
        }
    }
}

il dérive de

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());          
        }
    }
}
14
Sjoerd222888

Supprimez simplement cette ligne de code dans le fichier web.config:

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

Votre web.config le fichier doit maintenant ressembler à ceci:

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

En ajoutant simplement owin:appStartup clé dont vous n'avez pas besoin d'attribut de démarrage.

29