Установите svn:ignore
свойство родительского каталога:
svn propset svn:ignore dirname .
, Если у Вас есть несколько вещей проигнорировать, отделитесь новыми строками в значении свойства. В этом случае легче отредактировать значение свойства с помощью внешнего редактора:
svn propedit svn:ignore .
Таким образом, я провел большую часть дня, пытаясь выяснить, почему я не мог заставить это работать. Так как я выполняю свои вызовы от System.Web.Http.ApiController
, оказывается, что Вы не можете использовать DefaultPropertyBinder
решение, как упомянуто выше, но вместо этого должны нас IModelBinder
класс.
класс, что я волновал запись для замены основополагающей работы @AndreasZoltan, как записано выше, следующие:
using System.Reflection;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Http.ModelBinding;
using QueryStringAlias.Attributes;
namespace QueryStringAlias.ModelBinders
{
public class AliasModelBinder : IModelBinder
{
private bool TryAdd(PropertyInfo pi, NameValueCollection nvc, string key, ref object model)
{
if (nvc[key] != null)
{
try
{
pi.SetValue(model, Convert.ChangeType(nvc[key], pi.PropertyType));
return true;
}
catch (Exception e)
{
Debug.WriteLine($"Skipped: {pi.Name}\nReason: {e.Message}");
}
}
return false;
}
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
Type bt = bindingContext.ModelType;
object model = Activator.CreateInstance(bt);
string QueryBody = actionContext.Request.Content.ReadAsStringAsync().Result;
NameValueCollection nvc = HttpUtility.ParseQueryString(QueryBody);
foreach (PropertyInfo pi in bt.GetProperties())
{
if (TryAdd(pi, nvc, pi.Name, ref model))
{
continue;
};
foreach (BindAliasAttribute cad in pi.GetCustomAttributes<BindAliasAttribute>())
{
if (TryAdd(pi, nvc, cad.Alias, ref model))
{
break;
}
}
}
bindingContext.Model = model;
return true;
}
}
}
, Чтобы удостовериться, что это работает как часть вызова WebAPI, который необходимо также добавить config.BindParameter(typeof(TestModelType), new AliasModelBinder());
в части Regiser Вашего WebApiConfig
.
при использовании этого метода также необходимо удалить [FromBody]
из сигнатуры метода.
[HttpPost]
[Route("mytestendpoint")]
[System.Web.Mvc.ValidateAntiForgeryToken]
public async Task<MyApiCallResult> Signup(TestModelType tmt) // note that [FromBody] does not appear in the signature
{
// code happens here
}
Примечание, которое эта работа основывается на ответе выше, с помощью эти QueryStringAlias
образцы.
В данный момент это, вероятно, перестало бы работать в случае, где TestModelType имел сложные вложенные типы. Идеально существует несколько других вещей:
, Но на данный момент я удовлетворен этим для своих собственных потребностей. Надо надеяться, кто-то находит эту часть полезной.