代码之家  ›  专栏  ›  技术社区  ›  DaveDev

在哪里修剪()传入的请求参数?

  •  4
  • DaveDev  · 技术社区  · 15 年前

    我有以下代码块

    public ActionResult Tabs(SearchViewModel svm)
    {
        if (Request.IsAjaxRequest())
        {
            svm.Summary = _entitySearchService.GetSearchDataSummary(svm.Search);
            return PartialView(svm);
        }
        else
        {
            return RedirectToAction("QuickSearch", "Search"
                , new RouteValueDictionary { { "search",  svm.Search } });
        }
    }
    

    如果用户提交的搜索以空格结尾,例如“something”,如果是ajax请求,则可以正常工作,但如果不是ajax请求,则请求将被重定向到不同的操作方法,此时出现问题并返回404。

    我可以做一个 trim() else 条款,例如。

    new RouteValueDictionary { { "search", svm.Search.Trim() } }

    但也有一些地方会发生这种情况。理想情况下,我可以在一个地方完成这一切。

    如果我把它放在控制器里会不会被认为太黑了 Initialize

        protected override void Initialize(RequestContext requestContext)
        {
            // do a test to see if there's a 'search' parameter in requestContext,
            // and if so, trim it
    
            base.Initialize(requestContext);
        }    
    

    还是有其他更好的方法?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Fabiano    15 年前

    如果这是一个选项,则可以重写SearchViewModel的setter

    public class SearchViewModel
    {
       ...
    
       private string search;
    
       public string Search
       {
          get
          {
             return search;
          }
          set
          {
             search = value.Trim();
          }
       }
    
       ...
    }