2013-05-29 11 views
14

ModelState.IsValid'i kontrol edecek bir eylem öncesi web api kancası var. ModelState geçerli değilse, eylemi yürütmek istemiyorum ve sadece iletimi hemen döndürmek istiyorum. Bunu tam olarak nasıl yapıyorum?Web Api - web üzerinden bir boru hattını doğrudan OnActionExecuting Filtresinden nasıl durdurulur

public class ValidateModelStateAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) { 
     if (!actionContext.ModelState.IsValid) 
     { 
      var msg = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState); 
      // Now What? 
     } 
     base.OnActionExecuting(actionContext); 
    } 
} 

cevap

28

atmak gerektiğidir. Sonuç boş değilse, eylemi yürütmez. tam sözdizim şu an bana kaçan, ancak

if(actionContext.ModelState.IsValid == false) 
{ 
     var response = actionContext.Request.CreateErrorResponse(...); 
     actionContext.Response = response; 
} 
+0

Anlıyorum, üssü arayabilir miyim, değil mi? İstediğim şey, tüm eylem öncesi filtrelerin çalışması değil, eylemin kendisidir. Bu şekilde, herhangi bir günlüğe kaydetme filtresi hala –

+0

'u çalıştıracaktır, 'base' –

2

Benim tahminim Response.Result kümesi HttpResponseException

+0

Sence Bu sadece mesajı geri döndürmekle aynı şekilde çalışırdı? Derleme durumunda değil, bu yüzden atm'yi kontrol edemiyorum, ancak doğrulama sorunları için istisnalar atmak garip görünüyor. –

+0

@GeorgeMauer YetkilendirmeFiltreleri hakkında emin olmak için ActionFilters için çalışacaktır. Joanna'nın belirttiği gibi, sadece Tepki'yi de ayarlayabilirsiniz. Vay canına, ActionFilters'dan, hiçbir sebepten ötürü çok fazla karmaşıklıktan nefret ediyorum. –

+0

Ne demek istiyorsun? Kesişen endişeleri başka nasıl yapıyorsunuz? Bunun için temel sınıfları kullanmak, genellikle çapraz-kesişen kaygılar elde edince büyük bir esnek olmayan dağınıklığa dönüşür. Diğer tek seçenek PostSharp gibi kendi sorunlarına sahip bir şey olmaktan çıkıyor. –

7

aslında ASP.NET WebAPI sayfasında gördünüz mü kadar basit değil mi?

ulaşmak için çalışıyoruz ne gibi çok fazla görünüyor ve tüm yaptıkları Bağlam nesnesinin Yanıtını ayardır:

If model validation fails, this filter returns an HTTP response that contains the validation errors. In that case, the controller action is not invoked.

http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api

bkz: Handling Validation Errors

+0

ah diyebilirsiniz, hayır bunu görmemiştim. Teşekkürler. –