Home > Enterprise >  Global.asax.cs Application_BeginRequest - Throw WebFaultException
Global.asax.cs Application_BeginRequest - Throw WebFaultException

Time:02-10

Is there a way in WCF to check some logic based on the type of Request it receives? Can this be done in the actual service endpoint code?

For example:

After Service Initialization my service receives a PUT Request. In myService.svc.cs I would like to have logic that looks like this:

if httpRequest.Type == PUT
{
    //Do Something
} 

Is this possible? I'm sure there is a better way to handle requests than adding logic for every Operation Contract that is of type PUT. Apologies if this question doesn't make sense I'm sort of new to WCF and am trying to learn. Please let me know if you need clarifiers.

EDIT:

This is what myService.svc.cs looks like currently:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class MyService: IMyService
{
    public async Task<someObject> GetMethod1 () // Some GET Method
    { 
        doSomethingForGetRequests();
        //method implementation
    }

    public async Task<someObject> GetMethod2 () // Some GET Method
    { 
        doSomethingForGetRequests();
        //method implementation
    }

    public async Task<someObject> PutMethod1 () // Some PUTMethod
    { 
        doSomethingForPutRequests();
        //method implementation
    }

    doSomethingForPutRequests()
    {
       if(config.IsReadOnly)
       {
           throw new WebFaultException(HttpStatusCode.BadRequest);
       }
    }
}


I am wondering if there is a place where i can place doSomethingForGetRequest() and doSomethingForPutRequest() in a central location before the request reaches these methods so I don't have to add these methods to each one of my Service Methods.

Would global.asax.cs Application_BeginRequest() be an appropriate place for this logic?

CodePudding user response:

Maybe a message inspector can help you, it's called on every request that arrives at the service.

IDispatchMessageInspector defines the methods that enable custom inspection or modification of inbound and outbound application messages in service applications.

You can check out these posts:
Detect if action is a POST or GET method
Call the method automatically for each and every request in the WCF REST

  • Related