c# - मेरा एएसपी.नेट वेब एपीआई एक्शनफिल्टर एट्रिब्यूट ऑनएक्शन एक्सटेक्शनिंग फायरिंग क्यों नहीं है?




asp.net-web-api action-filter (4)

WebApi के लिए, आपको nuget से Microsoft.AspNet.WebApi.Core इंस्टॉल करना चाहिए। एमवीसी के लिए आप System.Web.MVC का उपयोग कर सकते हैं।

मैं यहां क्या देखा है इसे लागू करने की कोशिश कर रहा हूं: http://www.piotrwalat.net/nhibernate-session-management-in-asp-net-web-api/ NhSessionManagementAttribute http://www.piotrwalat.net/nhibernate-session-management-in-asp-net-web-api/ लेकिन मुझे अपने NhSessionManagementAttribute साथ कोई समस्या है।

मैंने यह देखने के लिए कि क्या फ़ंक्शन को कभी भी बुलाया जा रहा था, मैंने अपने OnActionExecuting(HttpActionContext actionContext) पर ब्रेकपॉइंट्स सेट किए हैं - यह नहीं था।

मैंने अपनी global.asax.cs फ़ाइल को दोबारा जांच लिया और पाया कि मैं वास्तव में ActionFilter को पंजीकृत कर रहा हूं:

GlobalConfiguration.Configuration.Filters.Add(new NhSessionManagementAttribute());

मैंने अपने नियंत्रक वर्ग दोनों को भी सजाया है, साथ ही गुणों के साथ इसके कार्यों का कोई फायदा नहीं हुआ है:

public class ClientsController : ApiController {
    static readonly ClientRepository repository = new ClientRepository();

    [NhSessionManagement]
    public IEnumerable<Client> GetAllClients() {
        return repository.GetAll();
    }

    [NhSessionManagement]
    public Client GetClient(int id) {
        Client client = repository.Get(id);
        if (client == null) {
            throw new HttpResponseException(
                new HttpResponseMessage(HttpStatusCode.NotFound)
            );
        }
        return client;
    }
}

यह क्रिया फ़िल्टर क्यों किसी भी घटना को फायरिंग नहीं करेगा?


ऊपर दिए गए उत्तर ने निश्चित रूप से मेरी मदद की - दूसरों को कुछ समय बचाने के लिए ... यहां स्पष्ट रूप से अंतर है।

मानक एमवीसी नियंत्रक का उपयोग करें:

// System.Web.Mvc
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
}

ओडाटा HTTP नियंत्रक का उपयोग करें:

// System.Web.Http.Filters;
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
    base.OnActionExecuted(actionExecutedContext);
}

मेरी समस्या बहुत आसान थी:

अपने कंट्रोलर को <actionPreProcessActivitiesAttribute()> _ से सजाया गया है जांचें


यदि आप किसी प्रोजेक्ट में काम कर रहे हैं तो एमवीसी और वेबएपीआई असेंबली दोनों हैं, तो क्या आप यह जांच सकते हैं कि आपके एक्शनफिल्टर एट्रिब्यूट के नेमस्पेस का नाम क्या है। यह काफी उलझन में है क्योंकि दोनों के तहत दो एक्शनफिल्टर एट्रिब्यूट हैं:

  • वेबएपीआई: सिस्टम.Web.Http.Filters
  • एमवीसी: सिस्टम.Web.Http.Mvc






actionfilterattribute