Je commence un nouveau projet avec Mongo, Norm et MVC .NET. P>
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: p>
Site Web / Admin / Edit / 23 1111160,3.240.200.191 56,25,0,0,0 P>
et il ne se lie pas automatiquement à mon contrôleur en tant qu'objectide p>
Avez-vous des suggestions / meilleures pratiques pour travailler avec cela? Dois-je coder / décoder l'ID à chaque fois? P>
Merci! P>
5 Réponses :
Je ne connais pas le type code> ObjectId code> mais vous pouvez écrire un Custom Model Binder qui s'occupera de la conversion de la contrainte d'itinéraire code> à une instance de ObjectID code>. P>
Saviez-vous que vous pouvez utiliser l'attribut [MongOidIdIdifier] pour faire de la propriété d'une propriété comme une clé unique? P>
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]. P>
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. P>
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 ...
J'utilise après
protected void Application_Start() { ...... ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); }
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.
Utilisez un classeur de modèle personnalisé comme celui-ci ... (Travailler contre le pilote offical C # MongoDB) em>
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
Pour API Web Vous pouvez ajouter une liaison de paramètres personnalisée ule dans webapiconfig: et utilisez-le sans aucun attribut supplémentaire dans le contrôleur: p> [Route("{id}")]
public IHttpActionResult Get(ObjectId id)