You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Outlook Web加载项中使用.NET类库

在Outlook Web加载项中使用.NET类库的实现方案

Outlook Web加载项基于前端技术栈(JavaScript/TypeScript、HTML),无法直接加载并调用.NET程序集,以下是两种可行的实现方案:

方案一:将.NET类库封装为Web API,通过HTTP请求调用

这是最通用、易维护的方案,把类库功能暴露为后端接口供加载项调用。

  • 步骤1:创建并配置ASP.NET Core Web API
    • 在Visual Studio中新建ASP.NET Core Web API项目,添加对目标.NET类库的引用。
    • 编写API控制器,封装类库的方法,示例代码:
      [ApiController]
      [Route("api/outlook-addin")]
      public class AddinApiController : ControllerBase
      {
          private readonly IYourDotNetLibrary _library;
      
          public AddinApiController(IYourDotNetLibrary library)
          {
              _library = library;
          }
      
          [HttpPost("handle-task")]
          public IActionResult HandleTask([FromBody] TaskRequest request)
          {
              var output = _library.ExecuteTask(request.Data);
              return Ok(new { Output = output });
          }
      }
      
  • 步骤2:配置跨域与部署API
    • 为API添加CORS策略,允许Outlook Web域名访问(在Program.cs中配置):
      builder.Services.AddCors(options =>
      {
          options.AddPolicy("OutlookCorsPolicy", policy =>
          {
              policy.WithOrigins("https://outlook.office.com", "https://outlook.office365.com")
                    .AllowAnyHeader()
                    .AllowAnyMethod();
          });
      });
      
      app.UseCors("OutlookCorsPolicy");
      
    • 将API部署到服务器、Azure App Service等托管平台,确保加载项能访问到API地址。
  • 步骤3:在加载项中调用API
    • 在加载项的JS/TS代码中,使用fetch或Axios发起请求,示例:
      async function invokeDotNetLibrary() {
          const requestPayload = { data: "your-input-data" };
          try {
              const response = await fetch("https://your-api-domain/api/outlook-addin/handle-task", {
                  method: "POST",
                  headers: { "Content-Type": "application/json" },
                  body: JSON.stringify(requestPayload)
              });
              const result = await response.json();
              // 处理返回结果
              console.log(result.Output);
          } catch (error) {
              console.error("调用API失败:", error);
          }
      }
      

方案二:使用Blazor WebAssembly嵌入.NET代码(进阶)

如果希望直接在浏览器环境运行.NET类库代码,可以借助Blazor WebAssembly将类库打包到加载项中:

  • 步骤1:创建Blazor WebAssembly项目
    • 新建Blazor WebAssembly App项目,添加对目标.NET类库的引用。
    • 编写Razor组件调用类库方法,示例:
      @page "/library-call"
      @inject IYourDotNetLibrary LibraryService
      
      <button @onclick="RunLibraryMethod">执行.NET类库方法</button>
      <div>执行结果: @executionResult</div>
      
      @code {
          private string executionResult;
      
          private void RunLibraryMethod()
          {
              executionResult = LibraryService.ProcessData("test-input");
          }
      }
      
  • 步骤2:嵌入Blazor组件到加载项
    • 构建Blazor项目,将生成的wwwroot目录下的资源复制到Outlook加载项的项目目录中。
    • 在加载项的HTML页面中引入Blazor启动脚本:
      <script src="_framework/blazor.webassembly.js"></script>
      
    • 通过iframe直接加载Blazor组件页面,或整合到加载项的现有页面中。

关键注意事项

  • 身份验证:如果API涉及敏感操作,需添加Azure AD OAuth等身份验证机制,确保只有授权用户能访问。
  • 性能优化:Web API调用需考虑网络延迟,Blazor WASM首次加载会有初始化开销,可通过代码分割、预加载优化。
  • 安全合规:确保API和加载项的交互符合Office Add-ins的安全规范,避免注入攻击等风险。

内容的提问来源于stack exchange,提问作者Smit Rathod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:15:41