String.prototype.reverse=function(){return this.split("").reverse().join("");}
или
String.prototype.reverse = function() {
var s = "";
var i = this.length;
while (i>0) {
s += this.substring(i-1,i);
i--;
}
return s;
}
I Используйте следующие
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());
}
почти забытые, сделайте URL-адреса из ObjectId.ToString()
Я не знаком с типом ObjectId
, но вы можете написать настраиваемое связующее устройство , которое позаботится о преобразовании ограничения маршрута id
в экземпляр ObjectId
.
Используйте настраиваемое связующее устройство, подобное этому ... (работает против официального драйвера 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)));
}
}
Знаете ли вы, что вы можете использовать атрибут [MongoIdentifier], чтобы заставить любое свойство действовать как уникальный ключ?
Я решал эту проблему, заимствуя технику из WordPress, представленный свойством «url slug» и украшающим это свойство [MongoIdentifier].
Итак, если бы у меня был человек по имени Джонни Уокер, я бы создал слизню «johnny-walker». Вам просто нужно убедиться, что эти URL-адреса остаются уникальными, и вы получаете чистые URL-адреса без уродливых идентификаторов объектов.
Для веб-API вы можете добавить параметр привязки обязательных параметров в WebApiConfig:
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)