9
votes

Comment passer ObjectId de MongoDB dans MVC.NET

Je commence un nouveau projet avec Mongo, Norm et MVC .NET.

Avant d'utiliser fluentnibernate, mes identifiants étaient entier, maintenant mes identifiants sont objectivés. Donc, quand j'ai un lien d'édition, mon URL ressemble à ceci:

Site Web / Admin / Edit / 23 1111160,3.240.200.191 56,25,0,0,0

et il ne se lie pas automatiquement à mon contrôleur en tant qu'objectide

Avez-vous des suggestions / meilleures pratiques pour travailler avec cela? Dois-je coder / décoder l'ID à chaque fois?

Merci!


0 commentaires

5 Réponses :


0
votes

Je ne connais pas le type ObjectId mais vous pouvez écrire un Custom Model Binder qui s'occupera de la conversion de la contrainte d'itinéraire à une instance de ObjectID .


0 commentaires

0
votes

Saviez-vous que vous pouvez utiliser l'attribut [MongOidIdIdifier] pour faire de la propriété d'une propriété comme une clé unique?

Je résolvez cette question en empruntant une technique de WordPress en ayant également une propriété également représentée par une propriété "Slug URL" et décorant cette propriété avec [MongoidIdidifier].

Donc, si j'avais une personne nommée Johnny Walker, je créerais une limace de "Johnny-Walker". Il vous suffit de vous assurer que ces Slug URL restent uniques et que vous obtiendrez des URL propres sans ID de l'objet laids.


1 commentaires

Yup je sais que, puisque ce n'est que pour l'administration, je n'ai pas besoin d'avoir des URL propres. Pour l'instant, j'ai ajouté une propriété idvalue qui rend la valeur d'ObjectId comme une chaîne et lorsque j'ai besoin d'aller chercher les données que je viens de faire .Single (nouvel objecid (ID)) Je ne sais pas si c'est le meilleur moyen mais ça marche bien ...



14
votes

J'utilise après

protected void Application_Start()
    {
        ......

        ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); 
    }


2 commentaires

Cette solution ne fonctionne pas lorsque les valeurs sont transmises sous une forme. Consultez ma réponse pour une solution qui fonctionne, peu importe la manière dont les valeurs sont transmises. (Pourrait également être à noter quel pilote C # MongoDB c'était pour la syntaxe varie).


La question initiale était dans le contexte ASP.NET MVC et code standard qui permettrait au contrôleur d'analyser ObjectId de l'URL.



16
votes

Utilisez un classeur de modèle personnalisé comme celui-ci ... (Travailler contre le pilote offical C # MongoDB) xxx


2 commentaires

Cela jette une exception lorsque le paramètre est traité avec. Je pense qu'à utiliser Tryparse et retourner ObjectId.empty quand il est invalide est un meilleur moyen de la manipuler.


@Ianmercer, il ne sera pas involonible



0
votes

Pour API Web Vous pouvez ajouter une liaison de paramètres personnalisée ule dans webapiconfig: xxx pré>

et utilisez-le sans aucun attribut supplémentaire dans le contrôleur: p>

 [Route("{id}")]
 public IHttpActionResult Get(ObjectId id)


0 commentaires