2016-08-06 1 views
0

Récemment j'ai installé FluentImpossible d'accéder à la route dupliquée du contrôleur après l'installation de fluentvalidation.webapi?

J'ai deux projets - un MVC et un autre projet Web Api. Les deux ont le même contrôleur nommé en tant que contrôleur des offres. Après une installation fluide, j'ai eu un problème à savoir que la requête web api n'est pas capable de localiser n'importe quel DealsController.

Dans la méthode Gloabal asax- Application_Start de MVC:

protected void Application_Start(object sender, EventArgs e) 
{ 
      System.Web.Http.GlobalConfiguration.Configure(CompanyName.Service.WebApiConfig.Register); 
      CompanyName.RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes); 

} 

Ces deux états enregistre les routes pour mvc et api web respectivement.

J'ai DealsController, qui est situé avec le même nom dans les deux projets (MVC et Web Api).

C'est le DealsController de MVC:

public class DealsController : System.Web.Mvc.Controller 
{ 
    public DealsController() 
    { 

    } 
} 

Ceci est Web Apis Offres contrôleur:

public class DealsController : System.Web.Http.ApiController 
{ 
    public DealsController() 
     { 

     } 

    [Route("api/advantage/getDeals/")] 
    public IHttpActionResult GetDeals([FromUri] CompanyName.Entity.Deals.Filters filter) 
    { 
    } 
} 

post-installation fluentvalidation.webapi de NuGet, quand je frappe la méthode de cette web api: http://localhost/api/advantage/getDeals/?cityId=2&sc=0&so=1&pn=1

Je reçois l'erreur suivante:

« message »: « Aucune ressource HTTP a été trouvé qui correspond à la demande URI « http://localhost/api/advantage/getDeals/?cityId=2&sc=0&so=1&pn=1 ». »,

« MessageDetail »: « Aucun type a été trouvé correspondant au contrôleur nommé « avantage ». »

Je ne sais pas ce qui se passe exactement après l'installation du paquet web api de validation. Je viens d'installer fluentvalidation.webapi package qui m'a donné quelques erreurs liées à cors, j'ai donc installé Microsoft.AspNet.WebApi.Cors.

Si je renommer Mon contrôleur d'API web (dealscontroller) sous un autre nom, cela fonctionne correctement.

Mais je ne comprends pas ce qui se passe exactement ici et quel autre risque cette mise à jour de fluentvalidation.webapi peut avoir dans ma solution et d'autres apis.

+0

Lorsque vous avez 2 projets distincts, pourquoi est-ce que vous enregistrez des routes MVC et WebAPI via Application_Start de MVC? Il devrait y avoir une application_start distincte pour chaque projet. Est-ce que je manque quelque chose? Aussi comment appelez-vous votre API? –

+0

En fait, le projet ayant une API Web est un projet de bibliothèque de classes normal. Ce n'est pas un projet Web api réel. Nous ajoutons manuellement des contrôleurs d'API Web à ce projet de bibliothèque de classes. – maverick

Répondre

1

Je pense que lorsque vous installez FluentValidation.WebAPI, il met à niveau le Microsoft.AspNet.WebApi ou d'autres bibliothèques API Web (bien que cela ne devrait pas arriver). Si ce n'est pas le Microsoft.AspNet.WebApi.Cors va certainement changer la version (si vous n'êtes pas sur la dernière version).

Vous devez donc vous assurer que la version des bibliothèques d'API Web est la même dans la bibliothèque de projets et de classes MVC.

+0

ouais .. j'ai eu une erreur de cors pour laquelle j'ai posté ceci. (http://stackoverflow.com/questions/38803505/assembly-system-web-http-cors-5-2-3-0-uses-system-web-http-5-2-3-0-which-ha) S'il vous plaît jeter un oeil à ce post. Peut-être obtenez-vous un meilleur aperçu du problème auquel je suis confronté. – maverick

+0

bien que pour ce problème, je me suis référé à (http: // stackoverflow.com/questions/28604325/how-to-get-système-web-http-version-5-2-3-0) et le paquet de base de Web api installé qui a résolu ce problème d'erreur de construction. Mais plus tard j'ai trouvé que ce contrôleur en solution (le duplicata en mvc et web api) a cessé de fonctionner. – maverick

+0

Bien sûr, je vais regarder dans votre autre poste. Mais faire la même version permettra de résoudre ce problème. Devrait être marqué comme réponse. –