> ## Documentation Index
> Fetch the complete documentation index at: https://ai.easyaf.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# McpHttpContextAccessor

> [IHttpContextAccessor](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.http.ihttpcontextaccessor) that keeps the MCP request and the in-process O...

## Definition

**Assembly:** Microsoft.OData.Mcp.AspNetCore.dll

**Namespace:** Microsoft.OData.Mcp.AspNetCore.Hosting

**Inheritance:** System.Object

## Syntax

```csharp theme={null}
Microsoft.OData.Mcp.AspNetCore.Hosting.McpHttpContextAccessor
```

## Summary

[IHttpContextAccessor](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.http.ihttpcontextaccessor) that keeps the MCP request and the in-process OData
request as two contexts. [McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) always returns [McpHttpContextAccessor.Active](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#active).
[HttpContext)](https://learn.microsoft.com/dotnet/api/microsoft.odata.mcp.aspnetcore.hosting.mcphttpcontextaccessor.start\(microsoft.aspnetcore.http.httpcontext\)) / [McpHttpContextAccessor.End](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#end) change which context is active without using
Microsoft's `HttpContextAccessor` setter (that setter nulls a shared holder and ends
the outer request).

## Remarks

Register this as [IHttpContextAccessor](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.http.ihttpcontextaccessor) after `AddHttpContextAccessor` so
last-wins DI gives Restier and `DefaultHttpContextFactory` this instance.

Host `Initialize` assigns [McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) (sets [McpHttpContextAccessor.Outer](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#outer) and
[McpHttpContextAccessor.Active](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#active)). Inner execute calls [HttpContext)](https://learn.microsoft.com/dotnet/api/microsoft.odata.mcp.aspnetcore.hosting.mcphttpcontextaccessor.start\(microsoft.aspnetcore.http.httpcontext\)), then [McpHttpContextAccessor.End](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#end) in
`finally`. Host `Dispose` assigns [`null`](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null), which poisons the
holder so every execution context sees request-end.

## Examples

```csharp theme={null}
accessor.HttpContext = mcpRequest;
accessor.Start(odataRequest);
try
{
    await pipeline(odataRequest);
}
finally
{
    accessor.End();
}
```

## Constructors

### &#x20;.ctor

#### Syntax

```csharp theme={null}
public McpHttpContextAccessor()
```

### &#x20;.ctor Inherited

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public Object()
```

## Properties

### &#x20;Active

Gets the context [McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) returns. [HttpContext)](https://learn.microsoft.com/dotnet/api/microsoft.odata.mcp.aspnetcore.hosting.mcphttpcontextaccessor.start\(microsoft.aspnetcore.http.httpcontext\)) and
[McpHttpContextAccessor.End](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#end) change this without using the setter.

#### Syntax

```csharp theme={null}
public Microsoft.AspNetCore.Http.HttpContext Active { get; }
```

#### Property Value

Type: `Microsoft.AspNetCore.Http.HttpContext?`

### &#x20;HttpContext

#### Syntax

```csharp theme={null}
public Microsoft.AspNetCore.Http.HttpContext HttpContext { get; set; }
```

#### Property Value

Type: `Microsoft.AspNetCore.Http.HttpContext?`

### &#x20;Inner

Gets the in-process OData context, or [`null`](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) if [HttpContext)](https://learn.microsoft.com/dotnet/api/microsoft.odata.mcp.aspnetcore.hosting.mcphttpcontextaccessor.start\(microsoft.aspnetcore.http.httpcontext\)) has not run
or [McpHttpContextAccessor.End](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#end) / request-end has already cleared it.

#### Syntax

```csharp theme={null}
public Microsoft.AspNetCore.Http.HttpContext Inner { get; }
```

#### Property Value

Type: `Microsoft.AspNetCore.Http.HttpContext?`

### &#x20;Outer

Gets the MCP (incoming) context, or [`null`](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) if the host has not assigned
[McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) yet.

#### Syntax

```csharp theme={null}
public Microsoft.AspNetCore.Http.HttpContext Outer { get; }
```

#### Property Value

Type: `Microsoft.AspNetCore.Http.HttpContext?`

## Methods

### &#x20;End

Makes [McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) return [McpHttpContextAccessor.Outer](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#outer) again and clears
[McpHttpContextAccessor.Inner](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#inner). Does not write to [McpHttpContextAccessor.Outer](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#outer)'s response.

#### Syntax

```csharp theme={null}
public void End()
```

### &#x20;Equals Inherited Virtual

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public virtual bool Equals(object obj)
```

#### Parameters

| Name | Type | Description |
| - | - | - |
| `obj` | `object?` | - |

#### Returns

Type: `bool`

### &#x20;Equals Inherited

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public static bool Equals(object objA, object objB)
```

#### Parameters

| Name | Type | Description |
| - | - | - |
| `objA` | `object?` | - |
| `objB` | `object?` | - |

#### Returns

Type: `bool`

### &#x20;GetHashCode Inherited Virtual

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public virtual int GetHashCode()
```

#### Returns

Type: `int`

### &#x20;GetType Inherited

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public System.Type GetType()
```

#### Returns

Type: `System.Type`

### &#x20;MemberwiseClone Inherited

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
protected internal object MemberwiseClone()
```

#### Returns

Type: `object`

### &#x20;ReferenceEquals Inherited

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public static bool ReferenceEquals(object objA, object objB)
```

#### Parameters

| Name | Type | Description |
| - | - | - |
| `objA` | `object?` | - |
| `objB` | `object?` | - |

#### Returns

Type: `bool`

### &#x20;Start

Makes [McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) return *inner* without dropping
[McpHttpContextAccessor.Outer](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#outer). Do not use the [McpHttpContextAccessor.HttpContext](https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor.md#httpcontext) setter for this.

#### Syntax

```csharp theme={null}
public void Start(Microsoft.AspNetCore.Http.HttpContext inner)
```

#### Parameters

| Name | Type | Description |
| - | - | - |
| `inner` | `Microsoft.AspNetCore.Http.HttpContext` | The in-process OData request. |

#### Exceptions

| Exception | Description |
| - | - |
| `ArgumentNullException` | Thrown when *inner* is [`null`](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null). |

### &#x20;ToString Inherited Virtual

> [!NOTE]
>
> Inherited from `object`

#### Syntax

```csharp theme={null}
public virtual string ToString()
```

#### Returns

Type: `string?`

## Related APIs

* Microsoft.AspNetCore.Http.IHttpContextAccessor


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.