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

# .NET SDK


[sample-projects-link]:https://github.com/cloudinary/CloudinaryDotNet/tree/master/samples
[changelog-link]: https://github.com/cloudinary/CloudinaryDotNet/blob/master/CHANGELOG.md

The Cloudinary .NET SDK provides simple, yet comprehensive image and video upload, transformation, optimization, and delivery capabilities through the [Cloudinary APIs](cloudinary_references#url_and_rest_apis), that you can implement using code that integrates seamlessly with your existing .NET application.
> **INFO**: :title=SDK security upgrade, June 2025

We recently released an enhanced security version of this SDK that improves the validation and handling of input parameters. We recommend upgrading to the [latest version][changelog-link] of the SDK to benefit from these security improvements.

## How would you like to learn?

{table:class=no-borders overview}Resource | Description 
--|--
[.NET quick start](dotnet_quickstart) | Get up and running in five minutes with a walk through of installation, configuration, upload, management and transformations.
[Sample project][sample-projects-link] | Explore a sample project to see how to implement Cloudinary functionality such as upload and delivery with transformations.
[Cloudinary .NET SDK GitHub repo](https://github.com/cloudinary/CloudinaryDotNet) | Explore the source code and see the [CHANGELOG][changelog-link] for details on all new features and fixes from previous versions. 
[Video tutorials](tutorial_screencasts) | Watch tutorials relevant to your use cases to learn how to use Cloudinary features. 

Other helpful resources...

This guide focuses on how to set up and implement popular Cloudinary capabilities using the .NET SDK, but it doesn't cover every feature or option. Check out these other resources to learn about additional concepts and functionality in general. 

{table:class=no-borders overview}Resource | Description 
--|--
[Developer kickstart](dev_kickstart) |A hands-on, step-by-step introduction to Cloudinary features.
[Glossary](cloudinary_glossary) | A helpful resource to understand Cloudinary-specific terminology.
[Guides](programmable_media_guides) | In depth guides to help you understand the many, varied capabilities provided by the product. 
[References](cloudinary_references) | Comprehensive references for all APIs, including .NET code examples.

## Install

Cloudinary's .NET library is available via the NuGet Package Manager. To install the library, run:

```
dotnet add package CloudinaryDotNet
```

or, if using the Package Manager Console:

```
Install-Package CloudinaryDotNet
```

See [NuGet Documentation](https://docs.microsoft.com/en-us/nuget/) for instructions of how to use NuGet packages.

## Configure

Use **CloudinaryDotNet** and **CloudinaryDotNet.Actions** namespaces in your code:

For C#:

```csharp
using CloudinaryDotNet;
using CloudinaryDotNet.Actions;
```

For VB.NET:

```csharp
Imports CloudinaryDotNet
Imports CloudinaryDotNet.Actions
```

The library contains powerful helper methods for using directly from views. This documentation provides examples of the integration with Cloudinary's .NET library for the ASP.NET MVC v4.0 framework, for both Razor and ASPX view engines.

Using namespaces in view code:

For Razor/C#:

```csharp
@using CloudinaryDotNet
@using CloudinaryDotNet.Actions
```

For Razor/VB.NET:

```csharp
@Imports CloudinaryDotNet
@Imports CloudinaryDotNet.Actions
```

For ASPX (C# and VB.NET):

```csharp
<%@ Import Namespace="CloudinaryDotNet" %>
<%@ Import Namespace="CloudinaryDotNet.Actions" %>
```

### Set required configuration parameters

To use the Cloudinary .NET library, you have to set at least your `cloud_name`. An `api_key` and `api_secret` are also needed for secure API calls to Cloudinary (e.g., image and video uploads).

You can set the configuration parameters globally, using either an environment variable or a constructor of the Cloudinary class, or programmatically in each call to a Cloudinary method. Parameters set in a call to a Cloudinary method override globally set parameters.

> **NOTE**: For backward compatibility reasons, the default value of the optional `secure` configuration parameter is `false`. However, for most modern applications, it's recommended to configure the `secure` parameter to `true` to ensure that your transformation URLs are always generated as HTTPS.
To define the `CLOUDINARY_URL` environment variable:

1. Copy the **API environment variable** format from the [API Keys](https://console.cloudinary.com/app/settings/api-keys) page of the Cloudinary Console Settings. 
2. Replace `<your_api_key>` and `<your_api_secret>` with your actual values. Your cloud name is already correctly included in the format. 
 
For example:

```
CLOUDINARY_URL=cloudinary://my_key:my_secret@my_cloud_name
```
Here's an example of setting configuration parameters in your .NET application:
  
For C#:

```csharp
Account account = new Account(
    "my_cloud_name",
    "my_api_key",
    "my_api_secret");

Cloudinary cloudinary = new Cloudinary(account);
cloudinary.Api.Secure = true;
```

For VB.NET:

```csharp
Dim account = New Account(
    "my_cloud_name",
    "my_api_key",
    "my_api_secret")

Dim cloudinary = New Cloudinary(account)
cloudinary.Api.Secure = true;
```

> **TIP**:
>
> :title=Tips

> * You may also want to check out the [API Keys and Credentials](finding_your_credentials_tutorial) video tutorial.

> * To generate transformation URLs, you only need to configure the cloud name. The API key and API secret aren't required for URL generation.

### Set additional configuration parameters

In addition to the required configuration parameters, you can define a number of optional [configuration parameters](cloudinary_sdks#configuration_parameters) if relevant.

You can append configuration parameters, for example `upload_prefix` and `secure_distribution`, to the environment variable:

```
CLOUDINARY_URL=cloudinary://my_key:my_secret@my_cloud_name?secure_distribution=mydomain.com&upload_prefix=https://api-eu.cloudinary.com/
```

## Use

Once you've installed and configured the .NET SDK, you can use it for:
* **Uploading files to your product environment**: You can upload any files, not only images and videos, set your own naming conventions and overwrite policies, moderate and tag your assets on upload, and much more. [See&nbsp;example](#quick_example_file_upload)
* **Transforming and optimizing images and videos**: Keeping your original assets intact in your product environment, you can deliver different versions of your media - different sizes, formats, with effects and overlays, customized for your needs. [See&nbsp;example](#quick_example_transform_and_optimize)
* **Managing assets**: Using methods from the Admin and Upload APIs, you can organize your assets, for example, list, rename and delete them, add tags and metadata and use advanced search capabilities. [See&nbsp;example](#quick_example_get_details_of_a_single_asset)

Capitalization and data type guidelines...

When using the .NET SDK, keep these guidelines in mind:  

* Parameter names: `PascalCase`. For example: **PublicId**
* Classes: `PascalCase`. For example: **CloudinaryConfiguration**
* Methods: `PascalCase`. For example: **GetCloudinaryJsConfig**
* Pass parameter data as: `Typed`

### Quick example: File upload

The following .NET code uploads the `dog.mp4` video using the public\_id, `my_dog`. The video overwrites the existing `my_dog` video if it exists. When the video upload finishes, the specified notification URL receives details about the uploaded media asset.

```csharp
var uploadParams = new VideoUploadParams()
    {
        File = new FileDescription(@"dog.mp4"),        
        PublicId = "my_dog",
        Overwrite = true,
        NotificationUrl = "https://mysite.example.com/my_notification_endpoint"
    };
var uploadResult = cloudinary.Upload(uploadParams);
```

> **Learn more about upload**:
>
> * Read the [Upload guide](upload_images) to learn more about customizing uploads, using upload presets and more.

> * See more examples of [image and video upload](dotnet_image_and_video_upload) using the Cloudinary .NET library.  

> * Explore the [Upload API reference](image_upload_api_reference) to see all available methods and options.

### Quick example: Transform and optimize

Take a look at the following transformation code and the image it delivers:

![sample transformation](https://res.cloudinary.com/demo/image/upload/c_thumb,g_face,h_150,w_150/r_20/e_sepia/l_cloudinary_icon/e_brightness:90/o_60/c_scale,w_50/fl_layer_apply,g_south_east,x_5,y_5/a_10/q_auto/front_face.png "disable_all_tab: true, with_url: false, frameworks:csharp")

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation()
  .Gravity("face").Height(150).Width(150).Crop("thumb").Chain()
  .Radius(20).Chain()
  .Effect("sepia").Chain()
  .Overlay(new Layer().PublicId("cloudinary_icon")).Chain()
  .Effect("brightness:90").Chain()
  .Opacity(60).Chain()
  .Width(50).Crop("scale").Chain()
  .Flags("layer_apply").Gravity("south_east").X(5).Y(5).Chain()
  .Angle(10).Chain()
  .Quality("auto")).BuildImageTag("front_face.png")
```

This relatively simple code performs all of the following on the original front_face.jpg image before delivering it:

* **Convert** and deliver the image in PNG format (the originally uploaded image was a JPG)
* **Crop** to a 150x150 thumbnail using face-detection gravity to automatically determine the location for the crop
* **Round the corners** with a 20 pixel radius
* Apply a **sepia effect**
* **Overlay the Cloudinary logo** on the southeast corner of the image (with a slight offset). Scale the logo overlay down to a 50 pixel width, with increased brightness and partial transparency (opacity = 60%)
* **Rotate** the resulting image (including the overlay) by 10 degrees
* **Optimize** the image to reduce the size of the image without impacting visual quality.

And here's the URL that's automatically generated and included in an image tag from the above code:

![sample transformation](https://res.cloudinary.com/demo/image/upload/c_thumb,g_face,h_150,w_150/r_20/e_sepia/l_cloudinary_icon/e_brightness:90/o_60/c_scale,w_50/fl_layer_apply,g_south_east,x_5,y_5/a_10/q_auto/front_face.png "disable_all_tab: true, with_code:false, with_image:false")

In a similar way, you can [transform a video](dotnet_video_manipulation#video_transformation_examples).

> **Learn more about transformations**:
>
> * Read the [image](image_transformations) and [video](video_manipulation_and_delivery) transformation guides to learn about the different ways to transform your assets.

> * See more examples of [image](dotnet_image_manipulation) and [video](dotnet_video_manipulation) transformations using the Cloudinary .NET library.  

> * See all possible transformations in the [Transformation URL API reference](transformation_reference).

### Quick example: Get details of a single asset

The following .NET example uses the Admin API [resource](admin_api#get_details_of_a_single_resource_by_public_id) method to return details of the image with public ID `cld-sample`:

```csharp
var cloudinary = new Cloudinary();
var getResult = cloudinary.GetResource("cld-sample");
```

#### Sample response

```json
{
  "asset_id": "bf98540caf22ed65775ee0951f4746c9",
  "public_id": "cld-sample",
  "format": "jpg",
  "version": 1719304891,
  "resource_type": "image",
  "type": "upload",
  "created_at": "2024-06-25T08:41:31Z",
  "bytes": 476846,
  "width": 1870,
  "height": 1250,
  "backup": true,
  "asset_folder": "",
  "display_name": "cld-sample",
  "url": "http://res.cloudinary.com/cld-docs/image/upload/v1719304891/cld-sample.jpg",
  "secure_url": "https://res.cloudinary.com/cld-docs/image/upload/v1719304891/cld-sample.jpg",
  "next_cursor": "497b323dcb9883a15a5e6a7cfb75d439e4de1ca882f5cbe8de6a8b322c37bdad",
  "derived": [
    {
      "transformation": "c_scale,w_500",
      "format": "jpg",
      "bytes": 22871,
      "id": "ce3d7bf3068809656dc5aa76572535da",
      "url": "http://res.cloudinary.com/cld-docs/image/upload/c_scale,w_500/v1719304891/cld-sample.jpg",
      "secure_url": "https://res.cloudinary.com/cld-docs/image/upload/c_scale,w_500/v1719304891/cld-sample.jpg"
    }
  ]
}

 ```

> **Learn more about managing assets**:
>
> * Check out the [Image and Video asset management](asset_management) guide for all the different capabilities.

> * Get an overview of [asset management](dotnet_asset_administration) using the .NET SDK.

> * Select the `.NET` tab in the [Admin API](admin_api) and [Upload API](image_upload_api_reference) references to see example code snippets.

 
## Sample projects
Take a look at the [.NET sample projects][sample-projects-link] page to help you get started integrating Cloudinary into your .NET application.

> **READING**:
>
> * Try out the .NET SDK using the [quick start](dotnet_quickstart).

> * Learn more about [uploading images and videos](dotnet_image_and_video_upload) using the .NET SDK.    

> * See examples of powerful [image](dotnet_image_manipulation) and [video](dotnet_video_manipulation) transformations using .NET code, and see our [image transformations](image_transformations) and [video transformation](video_manipulation_and_delivery) docs.   

> * Check out Cloudinary's [asset management](dotnet_asset_administration) capabilities, for example, renaming and deleting assets, adding tags and metadata to assets, and searching for assets.

> * Stay tuned for updates by following the [Release Notes](programmable_media_release_notes) and the [Cloudinary Blog](https://cloudinary.com/blog).
