您可以使用HTTP Handler更方便地处理HTTP请求。调用函数时,函数计算通过运行您提供的Handler来处理HTTP请求。本文介绍C# HTTP Handler的结构和特点。

HTTP Handler签名

public virtual async Task<HttpResponse> HandleRequest(HttpRequest request, HttpResponse response, IFcContext fcContext)
{
}

函数计算使用C#编写HTTP函数,需要使用Nuget引入Aliyun.Serverless.CoreAliyun.Serverless.Core.Http包。示例如下。

  <ItemGroup>
        <PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
        <PackageReference Include="Aliyun.Serverless.Core.Http" Version="1.0.3" />
  </ItemGroup>

HTTP Handler示例

一个简单的C# HTTP Handler示例如下所示。

using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Aliyun.Serverless.Core;
using Aliyun.Serverless.Core.Http;

namespace Example
{
    public class HttpHandler : FcHttpEntrypoint
    {
        public override async Task<HttpResponse> HandleRequest(HttpRequest request, HttpResponse response,
            IFcContext fcContext)
        {
            response.StatusCode = 200;
            response.ContentType = "text/plain";
            await response.WriteAsync("hello world\n");
            return response;
        }

        protected override void Init(IWebHostBuilder builder) { }

        static void Main(string[] args) { }
    }
}
函数入参解析如下。
  • HttpRequest requestHttpRequest类。
  • HttpResponse responseHttpResponse类。
  • IFcContext fcContext:上下文对象,包含函数和请求的信息。
说明 C# HTTP Handler必须继承Aliyun.Serverless.Core.Http中的FcHttpEntrypoint,其中Init函数和HandleRequest必须重写。

示例程序

函数计算官方库包含使用各种处理程序类型和接口的示例应用程序。每个示例应用程序都包含可用于轻松编译部署的方法,示例如下。

dotnet3-blank-http:HTTP回调处理程序。