[MONGODB] MVC.net에 MongoDB의에서 ObjectId가 전달하는 방법
MONGODBMVC.net에 MongoDB의에서 ObjectId가 전달하는 방법
나는 몽고, 규범 및 MVC 닷넷과 함께 새로운 프로젝트를 시작 해요.
내가 FluentNHibernate를 사용 전에 내 ID는 지금 내 ID를 ObjectId가이다, 정수했다 있도록. 내가 편집을 할 때 그래서 내 URL의 모습은 다음과 같이 사용하고 있습니다 :
웹 사이트 / 관리 / 편집 / 23,111,160,3,240,200,191,56,25,0,0,0
그리고는 ObjectId가 아니라 내 컨트롤러에 바인드를 automaticly하지 않습니다
이와 작업에 대한 제안 / 모범 사례가 있습니까? 내가 인코딩을해야하나요 / ID를 매번를 디코딩?
감사!
해결법
-
==============================
1.내가 사용 다음
내가 사용 다음
public class ObjectIdModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { string value = controllerContext.RouteData.Values[bindingContext.ModelName] as string; if (String.IsNullOrEmpty(value)) { return ObjectId.Empty; } return new ObjectId(value); } }
과
protected void Application_Start() { ...... ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); }
거의 잊고, ObjectId.ToString에서 메이크업 URL을 ()
-
==============================
2.이 같은 사용자 정의 모델 바인더를 사용 (공식 C # MongoDB를 드라이버에 대해 작업)
이 같은 사용자 정의 모델 바인더를 사용 (공식 C # MongoDB를 드라이버에 대해 작업)
protected void Application_Start() { ... ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); } public class ObjectIdModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (result == null) { return ObjectId.Empty; } return ObjectId.Parse((string)result.ConvertTo(typeof(string))); } }
-
==============================
3.나는 ObjectId가 유형에 익숙하지 오전하지만 당신은 ObjectId가의 인스턴스에 ID 경로 제약 조건을 변환 처리됩니다 사용자 정의 모델 바인더를 작성할 수 있습니다.
나는 ObjectId가 유형에 익숙하지 오전하지만 당신은 ObjectId가의 인스턴스에 ID 경로 제약 조건을 변환 처리됩니다 사용자 정의 모델 바인더를 작성할 수 있습니다.
-
==============================
4.당신은 당신이 고유 키와 같은 속성 행위를 만들기 위해 [MongoIdentifier] 속성을 사용할 수 있습니다 알고 계십니까?
당신은 당신이 고유 키와 같은 속성 행위를 만들기 위해 [MongoIdentifier] 속성을 사용할 수 있습니다 알고 계십니까?
나는 또한 "URL 슬러그"속성에 의해 표현 될 수있는 모든 개체를 가지고와 [MongoIdentifier]에 해당 속성을 장식하여 워드 프레스의 기술을 차용하여이 문제를 해결했습니다.
그렇다면 나는 조니 워커 내가 "조니 워커"의 슬러그를 만들 것이라는 사람이 있었다. 당신은 반드시 이러한 URL 슬러그 고유 머물 수 있도록해야하고 당신은 추한 객체 식별자없이 깨끗한 URL을 계속 얻을.
-
==============================
5.웹 API 위해 당신은 WebApiConfig에 ULE 바인딩 매개 변수 정의를 추가 할 수 있습니다 :
웹 API 위해 당신은 WebApiConfig에 ULE 바인딩 매개 변수 정의를 추가 할 수 있습니다 :
public static class WebApiConfig { public static void Register(HttpConfiguration config) { //... config.ParameterBindingRules.Insert(0, GetCustomParameterBinding); //... } public static HttpParameterBinding GetCustomParameterBinding(HttpParameterDescriptor descriptor) { if (descriptor.ParameterType == typeof(ObjectId)) { return new ObjectIdParameterBinding(descriptor); } // any other types, let the default parameter binding handle return null; } public class ObjectIdParameterBinding : HttpParameterBinding { public ObjectIdParameterBinding(HttpParameterDescriptor desc) : base(desc) { } public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken) { try { SetValue(actionContext, new ObjectId(actionContext.ControllerContext.RouteData.Values[Descriptor.ParameterName] as string)); return Task.CompletedTask; } catch (FormatException) { throw new BadRequestException("Invalid ObjectId format"); } } } }
그리고 컨트롤러의 추가 속성없이 사용 :
[Route("{id}")] public IHttpActionResult Get(ObjectId id)
from https://stackoverflow.com/questions/3143254/how-to-pass-objectid-from-mongodb-in-mvc-net by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 변경 문서에 대한 통지를 받기 (0) | 2019.12.25 |
---|---|
[MONGODB] MongoDB의 문서에서 기준과 일치하는 Upsert 배열 요소? (0) | 2019.12.25 |
[MONGODB] 몽고에서 유효성 검사 데이터에 대한 가장 좋은 방법은 무엇입니까? (0) | 2019.12.25 |
[MONGODB] 왜 MongoDB를 사용 인덱스 교차합니까? (0) | 2019.12.25 |
[MONGODB] 하여 MongoDB : 너무 많은 위치 (즉 '$') 요소로 발견 (0) | 2019.12.25 |