2016-09-28 2 views
1

작업에 매개 변수를 요청/확인하는 방법. 지금은 (끔찍하다) 같이 보이는 행동을 많이 가지고 :asp.net 작업에서 매개 변수를 요구하는 방법

public ActionResult DoSomething(string paramA, string paramB, string paramC) 
{ 
    if (string.IsNullOrWhiteSpace(paramA)) 
    { 
     return JsonResult(false, "paramA is missing"); 
    } 

    if (string.IsNullOrWhiteSpace(paramB)) 
    { 
     return JsonResult(false, "paramB is missing"); 
    } 

    if (string.IsNullOrWhiteSpace(paramC)) 
    { 
     return JsonResult(false, "paramC is missing"); 
    } 

    //Actual Code 
} 

방법이 encapsulte하는 ("전 세계적으로"가능성을)? 모델에 매개 변수를 랩핑하고 ModelState.IsValid를이 게시물에서와 같이 사용하는 것이 가능하다는 것을 알고 있습니다. https://stackoverflow.com/a/39538103/766304 같은 장소에서 앞으로 한 걸음 앞으로 나아갈 수도 있지만 일반적으로 모든 매개 변수를 모든 모델에 랩핑하는 것이 현실적이지 않습니다 (~ 1 1 액션 메서드 당 클래스 정의 ... 그게 얼마나 좋은가요?).

또한이 곳 중앙 처리해야 액션 식 당 다시이다 :

if (ModelState.IsValid == false) 
{ 
    return BadRequest(ModelState); 
} 
+0

ASP.NET MVC에서 모델의 유효성을 검사하고 오류를 반환하는 방법은 많습니다. 도움이 필요한 구체적인 것이 있습니까? – Luke

+0

들리겠습니다. 액션/액션이 아닌 방법으로 예제/키워드/링크를 제공 할 수 있습니까? – user766304

+0

글쎄, "요청 유효성 검사"를 검색 할 때 HTML이 포함 된 문자열 매개 변수처럼 잠재적으로 harmfull 콘텐츠에 대한 요청의 유효성을 검사하는 것에 관한 많은 내용이 있지만이 경우는 아닙니다. 내 질문에 다른 단어 : 요청 방법과 호출 방법을 일치시키는 방법을 사용자 정의하는 방법을 찾고 있어요. – user766304

답변

4

는 모델 클래스를 생성하고이 같은 [Required] 속성을 사용하는 것이 가장 쉬운 방법 :

public class FooModel 
{ 
    [Required] 
    public string ParamA {get;set;} 
    [Required] 
    public string ParamB {get;set;} 
    [Required] 
    public string ParamC {get;set;} 
} 

그리고는 다음과 같이 컨트롤러에서 사용 :

public ActionResult DoSomething(FooModel model) 
{ 
    if (!ModelState.IsValid) 
    { 
     // return some errors based on ModelState 
    } 

    //Actual Code 
} 

당신은 더 글로벌 접근 방식을 찾고 있다면, 나는 당신이 액션 필터를 조사하고 OnActionExecuting 필터를 사용하여 그곳에서 유효성을 처리 할 수 ​​있다고 믿는다. 다음은이를 수행하는 방법입니다. How can I centralize modelstate validation in asp.net mvc using action filters? 그런 매개 변수 중 하나라도 빠진 경우 해당 메소드가 호출되지 않습니다.

+0

비 모델 매개 변수와 관련된 문제는 해결되지 않지만 ActionFilter에서 ModelState를 확인하는 것이 좋습니다. +1. – user766304

+0

글쎄, 모델에 원하는 속성을 추가하고 속성을 추가하거나 속성이나 심지어 전체 클래스에 대한 커스텀 속성을 쓸 수도 있습니다. –

0

[필수] [길이]가있는 모델 주석과 모든 속성은 모델을 검증하는 가장 일반적인 방법 중 하나이며, 특히 Razor View 엔진과 통합되어 JavaScript 유효성 검사도 생성됩니다. 백 엔드에 EntityFramework를 사용하고 있으므로 UI, 컨트롤러 및 데이터 액세스 수준에서 유효성 검사를 수행하게됩니다.

당신은 또한 좋은 방법 당신의 방법에 대한 사전 및 사후 조건을 넣을 수있는 코드 계약을 사용할 수 있습니다

위의 어느 것도 아직 충분하지, 당신은 몇 가지 검사를 추가 할 수없는 경우 https://msdn.microsoft.com/en-us/library/dd264808(v=vs.110).aspx

중 하나를 당신의 컨트롤러 작업 또는 비즈니스 도메인 서비스에서 일부 비즈니스 유효성 검사를 수행하고 오류가 발견되면 오류 코드를 반환합니다.

+0

코드 계약은 일부 유효성 검사를 수행하는 더 깨끗한 방법 일 수 있지만 이러한 것들이 _globally_ 누락 된 매개 변수 문제를 해결하는 데 어떻게 도움이되는지는 알 수 없습니다. – user766304

+0

매개 변수에 값이 필요하면 예외가 throw되고 코드가 실행되지 않습니다. 또 다른 접근 방법은 라우팅 제한을 사용하는 것입니다. 매개 변수가 없으면 동작이 호출되지 않습니다. –

관련 문제