Ответы пользователя по тегу ASP.NET
  • Как сделать глобальный фильтр который проверит ModelState?

    yamaoto
    @yamaoto
    la programmeur
    Предлагаю вот такую связку
    //фильтр для валидации
    public class ValidateModelAttribute: Attribute, IActionFilter
        {
            public bool AllowMultiple { get; } = false;
    
            public Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext,
                CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
            {
                //примерно таким способом у меня все работает
                if (!actionContext.ModelState.IsValid)
                {
                    // получаем ошибки валидации по пути actionContext.ModelState[0..i].Error[0..j].ErrorMessage
                    var errors = (
                        from error in actionContext.ModelState
                        select new ErrorData("", error.Value.Errors[0].ErrorMessage) {Subject = error.Key}).ToArray();
                    throw new MyAwesomeValidationException("0x015", "Ошибка валидации") {ErrorData = errors};
                }
                return null;
            }
        }
    //фильтр для ошибок
     public class MyAwesomeExceptionFilterAttribute : ExceptionFilterAttribute
        {
            public override void OnException(HttpActionExecutedContext actionExecutedContext)
            {
                var result = new ApiResult<ErrorData[]>() { Result = false };
                var sp= actionExecutedContext.Exception as MyAwesomeException;
                if (sp!= null)
                {
                    result.Error = sp.Message;
                    result.ErrorCode = sp.Code;
                    result.Data = sp.ErrorData;
                }
                else
                {
                    result.Error = actionExecutedContext.Exception.Message;
                    result.ErrorCode = "";
                }
                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.OK);
                actionExecutedContext.Response.Content = new ObjectContent<ApiResult<ErrorData[]>>(result,new JsonMediaTypeFormatter());            
            }
        }
    Ответ написан
    Комментировать
  • Как в asp.net определить id записи по полю текстовому db.Mods.Find(id) не работает?

    yamaoto
    @yamaoto
    la programmeur
    Если я правильно понял, вы хотите получить определенную запись или ее идентификаторы?
    Если поле будет не уникальным то необходимо учитывать что таких записей может быть несколько

    var items = db.Mods.Where(m=>m.SomeField==model.SomeField);


    Если поле уникально
    var itemId = db.Mods.FirstOrDefault(m=>m.SomeField==model.SomeField).Select(m=>m.Id);


    Или если это поле есть внешний ключ, то можно
    var itemId = db.Mods.Single(m=>m.SomeField==model.SomeField).Select(m=>m.Id);
    Ответ написан
    Комментировать
  • Как изменить ошибку 500 в IIS?

    yamaoto
    @yamaoto
    la programmeur
    в Web.Config'e
    <customErrors mode="RemoteOnly" defaultRedirect="~/errors/error.aspx">
          <error statusCode="500" redirect="~/errors/error500.aspx"  redirectMode="ResponseRewrite" />/>
        </customErrors>


    в файле страницы
    <asp:Label runat="server" ID="ErrorMessage"></asp:Label>


    в бэкенд файле страниы
    protected void Page_Load(object sender, EventArgs e)
            {
    var error = HttpContext.Current.Server.GetLastError();
    this.ErrorMessage = error.Message;
            }
    Ответ написан
    Комментировать