function GetSum(a, b) {
return a + b;
}
function Echo() {
return str + " From Javascript";
}
function CallServerFunc(name) {
return name + " From Javascript - CallServerFunc";
}
function CallServerFunc2(name) {
return testapi.GetStringFromClassFunction(name) + " From Javascript - CallServerFunc";
}
2.單純傳參數進去 ,模擬呼叫
[HttpGet]
[Route("Sum")]
public int Sum(int x = 19, int y = 46)
{
var engine = new Jint.Engine();
engine.Execute(System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "Scripts" +
Path.DirectorySeparatorChar + "funcs.js"));
var result = engine.Execute("GetSum(" + x + "," + y + ")").GetCompletionValue();
return Convert.ToInt32(result.AsNumber());
}
3.在 javascript 中,Echo function 裡面並沒有 str 的參數,這樣我直接透過 C# 端定義一個 str 的變數,呼叫後並且取得回傳值。
[HttpGet]
[Route("Echo")]
public string Echo(string str="DONMA")
{
var engine = new Jint.Engine();
engine.Execute(System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "Scripts" +
Path.DirectorySeparatorChar + "funcs.js"));
engine.SetValue("str", str);
var result = engine.Execute("Echo()").GetCompletionValue();
return result.AsString();
}
4.這範例測試比較複雜,我先建立一個 TestClass ,並且讓 javascript 可以呼叫 TestClass 中 GetStringFromClassFunction 並且在回傳給 C# 端。
[HttpGet]
[Route("DoubleCall")]
public string DoubleCall(string str = "當麻")
{
var engine = new Jint.Engine();
engine.SetValue("testapi", new TestClass());
engine.Execute(System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "Scripts" +
Path.DirectorySeparatorChar + "funcs.js"));
var result = engine.Execute("testapi.GetStringFromClassFunction('"+ str + "')").GetCompletionValue();
return result.AsString();
}
public class TestClass
{
public string GetStringFromClassFunction(string str)
{
return str+ ", 您好我來自於 TestClass-GetStringFromClassFunction。";
}
}
可以玩一下,沒有很難。
--
The bug existed in all possible states.
Until I ran the code.