# WebApiProxy
**Repository Path**: jucheap/WebApiProxy
## Basic Information
- **Project Name**: WebApiProxy
- **Description**: AspNet WebAPI Proxy JavaScript CSharp
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 5
- **Created**: 2016-04-22
- **Last Updated**: 2021-08-23
## Categories & Tags
**Categories**: api-gateway
**Tags**: None
## README
https://github.com/RestCode/WebApiProxy
此源码根据个人需求,做了一些更改。
### WebApiProxy
This project comprises of a server-side extension that provides an proxy end-point for serving service metadata & a client-side proxy in JavaScript and also a client-side task that generates a client proxy in C#.
### Service-side Proxy provider
 **Getting started** 
Install via NuGet
Extend your ASP.NET Web API service by installing this package from NuGet:
```
Install-Package WebApiProxy
```
Note: This package requires the core libraries of ASP.NET Web API (version 5 or higher)
Register proxy endpoint
You need to explicitly register the proxy endpoint route. You can do this by using the RegisterProxyRoutes extension method that extends HttpConfiguration:
```
config.RegisterProxyRoutes();
```
Note: Make sure to include the WebApiProxy.Server namespace
This will register your service with an additional endpoint with the default address as /api/proxies'. It is also possible to specify a custom address by passing therouteTemplate` parameter:
config.RegisterProxyRoutes("$metadata");
Usage
This extension provides a proxy endpoint in your service (with /api/proxies as the default) that serves JavaScript and service metadata.
Given a Person API on the server:
```
public class PeopleController : ApiController
{
    public Person[] Get() {
    }
    public Person Get(int id) {
    }
}
```
allows you to use it like this in JavaScript on the client:
```
$.proxies.person.get()
  .done(function(people) {
    //do something with people
  });
$.proxies.person.get(2)
  .done(function(person) {
    //do something with person
  });
```
 **JavaScript proxy** 
Simply reference the proxy endpoint provided inside your HTML and you're good to go:
```
```
This functionality was adopted from ProxyApi - kudos to Stephen Greatrex :)
Getting the service Metadata
Invoke the service on its proxy endpoint api/proxies with the request header X-Proxy-Type as "metadata" and the service metadata including documentation will be in the response.
Excluding controllers
You can exclude your controllers by simply decorating them with the ExcludeProxy attribute
### Client-side Proxy Generator
Generate a C# proxy on the client-side based on the metadata provided by a service implementing WebApiProxy.
 **Install via NuGet** 
Install this package from NuGet:
```
Install-Package WebApiProxy.CSharp
```
Note: This package requires the libraries of ASP.NET Web API Client (version 5.2 or higher)
 **Generation** 
Note: The automatic generation of code upon project build is now completely opt-in. You need to explicitly specify if you want the proxy to be generated on every build.
The C# proxy code will be generated every time you re-build the project (only if you explicitly specified generateOnBuild="true") and is based on specific configuration in the WebApiProxy.config file:
```
```
The endpoint property is mandatory and provides the generator the URI of the metadata endpoint. See the WebApiProxy Configuration File page to read more on the config file.
Note: The generated code is cached to avoid compilation errors if the service isn't reachable at that time
 **Proxy generation using the Nuget Package Manager Console** 
You can also generate proxy code on demand by using the Nuget Package Manager Console. Simply run the commandlet:
```
WebApiProxy-Generate-CSharp
```
 **Usage** 
Given a PeopleController on the service-side:
```
public class PeopleController : ApiController
{
        /// 
        /// Gets all people with a given the name
        /// 
        /// The criteria to search for
        /// People collection
        public Person[] Get(string name)
        {
            return new Person[]{
                new Person { Id = 3, FirstName = "sss", LastName = "sqqqq"},
                new Person { Id = 3, FirstName = "sss", LastName = "sqqqq"}
            };
        }
}
```
can be used like this on the client-side:
```
using (var client = new PeopleClient())
{
    var response = await client.GetAsync("Fanie");
    var people = await response.Content.ReadAsAsync();
}
```
 _**Code snippet**_ 
Use the webapiproxy code snippet to quickly create the code structure above. Just type "webapiproxy" followed by the TAB key.
Note: If the types are not found (or resolved) after build, simply give your project a restart or restart Visual Studio.
Great developer experience with Intellisense
It even has nice Intellisense including documentation provided by the documentation provider: 

Note: The documentation on the Intellisense will only appear if the service uses the documentation provider. You can use the ASP.NET Web API Help Page package on NuGet