如何在Office JavaScript插件中调用.NET DLL?
解决Office Online JS插件调用.NET DLL的问题
嘿,作为Office插件开发的新手,我完全懂你想把.NET逻辑和JS插件结合起来的需求!不过得先明确一点:前端JavaScript没法直接调用本地的.NET DLL——因为Office Online插件是运行在浏览器沙箱里的,不能直接访问本地资源或者未暴露的后端代码。下面是具体的实现步骤,帮你搞定这个需求:
第一步:把.NET DLL封装成Web API服务
你需要把DLL里的功能暴露成HTTP接口,这样前端Ajax才能调用。在Visual Studio里可以这么做:
- 新建一个ASP.NET Web API项目(或者在现有Office插件项目里添加Web API控制器)
- 引用你的.NET DLL,在API控制器的Action方法里调用DLL的业务逻辑
- 举个简单的控制器示例:
using System.Web.Http; using YourDotNetDllNamespace; public class StockController : ApiController { [HttpPost] public IHttpActionResult UpdateStocks(StockData data) { // 调用你的.NET DLL方法处理业务 var updateResult = StockProcessingLibrary.UpdateStockRecords(data); return Ok(updateResult); } }
第二步:配置跨域(CORS)支持
因为Office Online插件是跨域调用你的Web API,所以必须在Web API项目里启用CORS,否则浏览器会拦截请求:
- 安装NuGet包:
Install-Package Microsoft.AspNet.WebApi.Cors - 在
WebApiConfig.cs里添加CORS配置:
using System.Web.Http; using System.Web.Http.Cors; public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 生产环境建议限制允许访问的域名,这里先用*做测试 var corsSettings = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(corsSettings); // 配置API路由规则 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
第三步:修改Office JS插件代码,调用Web API接口
把原来直接调用DLL的逻辑改成调用Web API的Ajax请求,补充完整你的updateStocks函数:
(function () { "use strict"; Office.initialize = function (reason) { $(document).ready(function () { app.initialize(); $('#update-stocks').click(updateStocks); }); }; function updateStocks() { // 准备要传给API的业务数据 var stockRequestData = { stockSymbol: "MSFT", updateQuantity: 150, operationType: "Adjust" // 其他你需要的参数 }; // 发送Ajax请求调用Web API $.ajax({ url: "https://your-api-deploy-url/api/stock/updatestocks", type: "POST", contentType: "application/json", data: JSON.stringify(stockRequestData), success: function (response) { // 处理API返回的成功结果 console.log("股票更新完成:", response); Office.context.ui.displayDialogAsync("更新成功!", { height: 150, width: 300 }); }, error: function (xhr, status, error) { // 处理请求失败的情况 console.error("更新失败:", error); Office.context.ui.displayDialogAsync("更新出错,请稍后重试", { height: 150, width: 300 }); } }); } })();
额外注意事项
- 部署Web API:测试阶段可以用本地IIS Express,正式环境要把API部署到云服务器或者IIS上,确保Office Online能访问到API的公开地址
- 权限验证:如果API涉及敏感业务,建议添加身份验证(比如Azure AD,Office插件本身支持Azure AD身份验证,能和API的权限体系打通)
- 安全限制:Office Online插件只允许HTTPS请求,所以你的Web API必须部署在HTTPS环境下,避免请求被拦截
内容的提问来源于stack exchange,提问作者Vital Sham
相关产品推荐
相关产品推荐

