Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 在同一http服务器上托管Aurelia CLI应用程序和WebApi服务_Asp.net Web Api_Cors_Aurelia - Fatal编程技术网

Asp.net web api 在同一http服务器上托管Aurelia CLI应用程序和WebApi服务

Asp.net web api 在同一http服务器上托管Aurelia CLI应用程序和WebApi服务,asp.net-web-api,cors,aurelia,Asp.net Web Api,Cors,Aurelia,如何进行配置,以便在同一http服务器中启动并托管Aurelia应用程序和Web API服务 联系人管理器很棒,我完全理解为什么它会模仿web服务,但你不能构建这样的真正应用程序 是否有设置web服务的演练?事件如果它只是从文件中读取一些JSON并传递它,那么真正的问题是如何设置在同一http服务器中运行的web服务来处理XSS问题 如果完整演练失败,请提供一些关于创建http服务器实例的节点代码位置的指导au和CLI非常棒,但它们隐藏了许多重要信息。简单的回答是,您不需要这样做 虽然理论上是可

如何进行配置,以便在同一http服务器中启动并托管Aurelia应用程序和Web API服务

联系人管理器很棒,我完全理解为什么它会模仿web服务,但你不能构建这样的真正应用程序

是否有设置web服务的演练?事件如果它只是从文件中读取一些JSON并传递它,那么真正的问题是如何设置在同一http服务器中运行的web服务来处理XSS问题


如果完整演练失败,请提供一些关于创建http服务器实例的节点代码位置的指导
au
和CLI非常棒,但它们隐藏了许多重要信息。

简单的回答是,您不需要这样做

虽然理论上是可能的,但这比仅仅解决CORS问题和使用单独的Web API服务器要求更高,用处更小。只有当您知道如何在客户机和服务器上处理COR,并且知道您不会想到提出这个问题时,这一点才是显而易见的

为了帮助迷路的人沿着这条阴暗的路标前行,下面介绍如何在9000上与Aurelia客户一起处理IIS7 MVC/WepApi2的CORS

服务器 将其作为web API项目根目录下
web.config
文件的
部分的子项放入

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>
下面是web服务的外观。有一个LINQ2SQL模型支持它,为了简洁起见,我省略了它

using Newtonsoft.Json;
using System.Linq;
using System.Reflection;
using System.Web.Http;

namespace DAL3.Controllers
{
  public class FormController : ApiController
  {

    // POST: api/Form
    public object Post([FromBody]JsonRequest jsr)
    {
      var T = GetType();
      var M = T.GetMethod(jsr.Command, BindingFlags.NonPublic | BindingFlags.Instance);
      var parms = new object[] { jsr.UID, jsr.Raw };
      if (M == null) return string.Format("M is null (\"{0}\")",jsr.Command);
      if (parms == null) return "parms is null";

      return M.Invoke(this, parms);
    }

    object Get(int UID, string Raw)
    {
      var dc = new Models.FormsDataContext();
      if (string.IsNullOrEmpty(Raw))
      {
        return dc.Forms.Where(x => x.FormEngine == true);
      }
      else
      {
        var id = JsonConvert.DeserializeObject<GetParams>(Raw).Id;
        return dc.Forms.Where(x => x.FormID == id);
      }
    }
  }
  //this class describes how to parse the parameters for Get
  class GetParams
  {
    public int Id { get; set; }
  }
  //if you defined some other method Quux that takes parameters 
  //create a QuuxParams class that matches what JS sends
}
然后将其添加到aurelia.json中的供应商包依赖项中。您不需要对象,只需要双引号中的名称,并根据有效的JSON语法使用尾随逗号

在代码中,您需要导入它

import {HttpClient} from 'aurelia-http-client';
下面是一个示例,在一个名为testserver的框中,一个名为DAL3的Web应用程序中,有一个名为Form的Web API服务

let foo = {
  UID: 18974,
  Command: "Get",
  Raw: null
}

let content = "UID=" + foo.UID + "&Command=" + foo.Command + "&Raw=" + JSON.stringify(foo.Raw)

let client = new HttpClient();

let req = client.createRequest("http://testserver/DAL3/api/Form")
 .asPost()
 .withHeader("Content-Type","application/x-www-form-urlencoded")
 .withContent(content)
 .send()
 .then(res => {
   console.log("Hurrah we have a response!");
 });
警告 以下任何一项都会导致使用动词选项的“飞行前”请求,这将导致失败

  • 添加非标准标头
  • 使用除
    text/plain
    application/x-www-form-urlencoded
  • 使用GET或POST以外的动词
对内容进行编码
对象
foo
根的三个属性是URL编码的,并用符号分隔,如上面的示例代码所示。Raw可以包含一个对象,甚至可以包含一个对象的有向无环图。JSON.stringify可以正确处理这两种情况。Null将解析为空字符串,但URL编码的解码将生成Null,这样就可以了;重要的是,原始参数应该存在,以满足另一端的Web API签名匹配。

您找到了吗?这是一个很难回答的问题。获取microsoft服务器。设置iis以将虚拟目录指向aurelia应用程序,并将应用程序指向web api应用程序。其中的aurelia和web api部分完全解耦,关于如何独立完成这两项任务,有很多资源。@MatthewJamesDavis-我尝试了这个选项,虽然我可以让它工作,但我更喜欢使用
au run--watch
查看BrowserSync的优点,因此根据我的回答,有必要解决CORS问题。@Larsi-是和否。我找到了一个解决方案满意,我在下面的回答中描述。
import {HttpClient} from 'aurelia-http-client';
let foo = {
  UID: 18974,
  Command: "Get",
  Raw: null
}

let content = "UID=" + foo.UID + "&Command=" + foo.Command + "&Raw=" + JSON.stringify(foo.Raw)

let client = new HttpClient();

let req = client.createRequest("http://testserver/DAL3/api/Form")
 .asPost()
 .withHeader("Content-Type","application/x-www-form-urlencoded")
 .withContent(content)
 .send()
 .then(res => {
   console.log("Hurrah we have a response!");
 });