GVKun编程网logo

asp.net-mvc-4 – ajax post works vs. angularjs $http无法使用ASP.NET MVC 4(无法连接asp.net development server)

14

以上就是给各位分享asp.net-mvc-4–ajaxpostworksvs.angularjs$http无法使用ASP.NETMVC4,其中也会对无法连接asp.netdevelopmentserv

以上就是给各位分享asp.net-mvc-4 – ajax post works vs. angularjs $http无法使用ASP.NET MVC 4,其中也会对无法连接asp.net development server进行解释,同时本文还将给你拓展AngularJS $ http.post,asp.net MVC控制器为空、AngularJS + ASP.NET Web API + ASP.NET MVC身份验证、angularjs – 如何使用ASP.Net MVC查看.csthml作为Angular View而不是.html、ASP.NET MVC和Angularjs一起+ ASP.NET Web API等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

asp.net-mvc-4 – ajax post works vs. angularjs $http无法使用ASP.NET MVC 4(无法连接asp.net development server)

asp.net-mvc-4 – ajax post works vs. angularjs $http无法使用ASP.NET MVC 4(无法连接asp.net development server)

我有两个项目客户端和服务器端.
客户端项目是纯htmljs.服务器端是ASP.NET MVC 4和Web Api.
因为我需要两个项目来启用CROS功能.
我添加到服务器的webconfig中:

<system.webServer>
 <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

正在运行的Ajax Post版本:

$.post(url,appContext).done(
                function(data,textStatus,jqXHR) {
                    successFn(data,textStatus);
                })
                .fail(
                    function(jqXHR,err) {
                        errorFn(err,textStatus);
                    });

angular $http发布版本不起作用:

$http({
                url: url,method: 'POST',params: { appContext: appContext },headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                    /*'Accept': 'text/json'*/}
            }).success(successFn).error(errorFn);

当我使用$http时,我收到两个错误:

>选项url 405(方法不允许)
> POST url 500(内部服务器错误)

ASP.NET MVC方法是

[System.Web.Http.HttpPost]
public List<Module> GetModules([FromBody]SessionContext appContext)
{
 return  CreateModules();
}

编辑:

角度模型的配置:

var emsApp = angular.module('EmsWeb',['ui.bootstrap']);
emsApp.config(['$routeProvider','$httpProvider',function($routeProvider,$httpProvider) {

    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

OPTIONS的标题请求我在浏览器中看到:

Request URL:http://localhost/EmsWeb/api/ModuleApi/GetModules?appContext=%7B%22globalDate%22%3A%22Mon%2C%2008%20Jul%202013%2013%3A09%3A35%20GMT%22%2C%22userToken%22%3A%22AlexToken%22%7D
Request Method:OPTIONS
Status Code:405 Method Not Allowed

Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept,origin,content-type
Access-Control-Request-Method:POST
Connection:keep-alive
DNT:1
Host:localhost
Origin:http://localhost:50463
Referer:http://localhost:50463/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.116 Safari/537.36
Query String Parametersview sourceview URL encoded
appContext:{"globalDate":"Mon,08 Jul 2013 13:09:35 GMT","userToken":"AlexToken"}

Response Headers
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:76
Content-Type:application/json; charset=utf-8
Date:Mon,08 Jul 2013 13:09:35 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

任何有关角度方式不起作用的想法都值得赞赏吗?

更新问题,因为事实证明是非常愚蠢的:
因为我使用了params而不是数据:

$http({
                url: url,headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                    /*'Accept': 'text/json'*/}
            }).success(successFn).error(errorFn);

angular转换为GetRequest.也不需要ContentType.
所以实际代码是

$http({method: 'POST',url: url,data: appCtx,}).success(successFn).error(errorFn);

所以ALMOST解决了,我看到angular仍然发出OPTIONS请求失败但是post请求通过…

所以对这一点的任何想法都表示赞赏

解决方法

我的问题是由于两个原因:
我使用params而不是数据

$http({
                url: url,headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                    /*'Accept': 'text/json'*/}
            }).success(successFn).error(errorFn);

angular转换为GetRequest.也不需要ContentType.所以实际代码是

$http({method: 'POST',}).success(successFn).error(errorFn);

在服务器端
我需要处理OPTIONS请求的东西.一种方法是使用[System.Web.Http.AcceptVerbs(“OPTIONS”)]来装饰方法,我认为这不是最好的方法.
另一种方法是添加Custom Message Handler.我还在研究它……

AngularJS $ http.post,asp.net MVC控制器为空

AngularJS $ http.post,asp.net MVC控制器为空

在我的Angularjs服务中,我有以下代码:

$http.post("/EditWorkout/GetId",data).error(function (responseData) {
            console.log("Error !" + responseData);
        });

我的ASP.net控制器中有此方法:

       [System.Web.Http.HttpPost]
        public JsonResult GetId(string routineId)
        {
            try
            {
                string x = routineId;
                return Json(new {success = true});
            }
            catch (Exception ex)
            {

                return Json(new { success = false,errorMessage = ex.Message });
            }

        }

我已经设置了一个断点return Json(new {success = true});,它被触发了,但是由于某种原因我的例程ID为null,而我使用angular的$ http.post发送的数据却不是。

为什么会这样呢?

AngularJS + ASP.NET Web API + ASP.NET MVC身份验证

AngularJS + ASP.NET Web API + ASP.NET MVC身份验证

我是AngularJS的新手,正在尝试为我的新Web应用程序对其进行评估。

需求:

我将有一个ASP.NET Web API,它将从Android,iPhone和Web应用程序(ASP.NET MVC)中使用。ASP.NET
Identity将在Web API中实现。这三个应用程序都将调用Web API的login方法来获取auth令牌。

问题:

我的问题是当Angular进行调用以获取HTML模板/视图,JavaScript文件时,如何获得ASP.NET MVC 服务器端身份验证
工作(与Web API同步,因此我不必分别登录ASP.NET
MVC)或其他资源。我在AngularJS上浏览了许多文章和博客,但仍然找不到适合我要求的安全模型。

可能的解决方案:

将登录调用直接调用ASP.NET MVC应用程序而不是Web API是一个好主意,并且ASP.NET MVC应用程序将调用Web
API进行登录,并在进行身份验证之后,将auth令牌保存在会话中并创建一个 FormsAuthentication cookie
和cookie数据中的数据将保存加密的auth令牌。此外,在HTML的 ng-init 中将 auth令牌
设置为AngularJS范围内的令牌。现在,当AngularJS尝试调用ASP.NET
MVC应用程序以获取HTML时,然后通过将cookie中解密的数据与会话中的auth数据进行匹配来对用户进行身份验证/授权。另外,AngularJS将
在标头中 发送 auth令牌,以 直接 调用Web API方法 ,以用于随后通过Web API进行数据操作的所有后续调用。

答案1

小编典典

我用非常严格的向前解决方案解决了这个问题。我只是确保在WebApiConfig的Register方法中有以下两行代码:

config.SuppressDefaultHostAuthentication();config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

而已。现在,我的MVC控制器在寻找会话cookie以进行授权,而我的Web API控制器在每个请求的标头中寻找auth令牌。此外,Web
API会响应登录/身份验证请求(例如)发送令牌(JSON)和会话cookie本身http:\\www.mydomain.com\token

因此,现在我将登录请求发送到Web
API以获取令牌以及会话cookie。会话Cookie将在每个请求时自动发送,因此我不必担心MVC控制器的授权。对于Web
API调用,我将在每个请求的标头中发送auth令牌,因为Web API控制器不关心与请求一起发送的会话cookie。

angularjs – 如何使用ASP.Net MVC查看.csthml作为Angular View而不是.html

angularjs – 如何使用ASP.Net MVC查看.csthml作为Angular View而不是.html

我试图使用Angulars $routeProvider将模板加载到我的Views文件夹中的.cshtml文件中的容器中.

我用这个代码得到了一个404 Angular:

.when('#/second',{ urlTemplate:"Views/second.cshtml",controller:"MainController"})

Agular找不到second.cshtml文件.
为什么?
是不是可以使用.cshtml文件?

为了向客户端提供.cshtml,您需要配置几个步骤.

我创建了一个名为AngularAspNet at GitHub的示例项目.

1)创建App文件夹以托管Angular Scripts.你可以说出你想要的任何名字.

2)将.cshtml文件放在App / xxx / Components /文件夹中.确保将属性设置为内容.

我想将Angular View和Component(JavaScript文件)放在一起.原因是当项目变得更加复杂时,它可以帮助我轻松找到View和相应的Component.因此,不是将.js放在Views文件夹中,而是将.chtml文件放在App(Angular Script)文件夹中.

1)在里面创建一个带有BlockViewHandler的web.config.

<?xml version="1.0"?>

<configuration>
  <configSections>
  ...        
  <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*.cshtml" verb="*" 
          preCondition="integratedMode" 
          type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
   ...
</configuration>

4)创建控制器和操作方法.

public class NgController : Controller
{
    public PartialViewResult RenderComponents(string feature,string name)
    {
        return PartialView($"~/App/{feature}/Components/{name}");
    }
}

5)配置路由.

routes.MapRoute(
    name: "Components",url: "{feature}/components/{name}",defaults: new { controller = "Ng",action = "RenderComponents" });

信用

Building Strongly-typed AngularJS Apps with ASP.NET MVC 5
by Matt Honeycutt

AngularJS & ASP.NET MVC Playing nice Tutorial by Miguel Castro

ASP.NET MVC和Angularjs一起+ ASP.NET Web API

ASP.NET MVC和Angularjs一起+ ASP.NET Web API

我想知道使用这两个世界的优点和缺点:

  • ASP.NET MVC和Angularjs一起使用(无需剃须刀,Angularjs即可完成工作)。
  • AngularJS(前端)+ ASP.NET Web API(后端)。

我们专注于具有大量服务器端业务规则和计算的大中型企业项目的SPA / Mini-SPA。我也关注安全性。

优缺点意见将帮助我在脑海中找到这个问题的答案:

一起使用ASP.NET Web API(后端),ASP.NET MVC和Angularjs是明智的决定吗?

答案1

小编典典

是的,将两者结合起来是明智的。显然,根据具体项目,您需要调整最终解决方案中的某些变量。

您所建议的实际上是我们最近2或3个项目的堆栈,根据特定要求在此处和此处有一些变体。我们已经使用了WebAPI + DurandalJS,WebAPI +
Knockout …一切都很好:) AngularJS似乎使用了最长的时间,在我们公司内部以及在社区的其他地方都越来越受欢迎(这是决定性的)对我来说)

当前技术堆栈。

                            +------------------------------------+                            |               Usage                |  +-------------------------+------------------------------------+  | AngularJS               | The client app web, or mobile      |  +-------------------------+------------------------------------+      | WebAPI                  | For all your data access needs     |  +-------------------------+------------------------------------+  | OAuth & Bearer Tokens   | For Authentication & Authorization |  +-------------------------+------------------------------------+  | SQL Server & EF / any   |  Persistence                       |  | any other noSQL variant |  & Storage                         |  +-------------------------+------------------------------------+  | Angular-UI /            |                                    |  | Angular-Material        | Base UI components                 |  +-------------------------+------------------------------------+  | Katana                  | Collection of projects for         |  |                         | supporting OWIN on MS-Stack        |  +-------------------------+------------------------------------+  | CORS                    | Standard for implementing          |  |                         | cross domain requests              |  +-------------------------+------------------------------------+

优点:

  • Web App可以很容易地移植到移动设备上(如果您以可能会移动的方式编写)

    • 使用科尔多瓦
    • 您拥有一个可以轻松选择使用其他服务/应用程序访问的API。此外,API很酷(与传统访问机制相比)
  • AngularJS允许使用功能强大且结构化的客户端代码(不是没有Angular就无法做到这一点,但以我的经验,如果您正确地遵循它们,框架将实施更好的实践)

  • 开始听起来像是破记录,但是众所周知,AngularJS可以进行超级测试

  • 如果您害怕NodeJS和grunt / gulp之类的东西,可以使用.Net捆绑

    • 并不是您一定要害怕它(而是熟悉>不熟悉)
    • 只要确保以Minsafe方式编写客户端代码
    • 实际上,Visual Studio的开发非常酷,特别是因为它们最近都将重点放在对开源的支持上。AngularJS,Node(有时可能会用到)和ASP.Net MVC的许多集成点

缺点:

  • 如果您不熟悉Angular,学习曲线会很不错

  • 可能重复验证

    • 为了减少往返行程/回调,显然最好在第一次执行时就发送正确的数据。因此,在少数(或大多数)实例中,我们需要复制JavaScript中的某些数据级别验证
    • 尽管它可能不适用,并且有点远…我去过一个客户那里,他们严格地希望使用MS的一切,因为开源是“不太安全的”,因为人们可以访问框架代码。 .. 去搞清楚。因此,请确保他们愿意使用开放源代码的SPA框架(这可能适用于任何其他框架或工具)(及其附带的所有内容)
  • 安全性重复。您需要确保保护API和应用程序的安全。(由于两层之间存在断开连接)

  • 您需要学习CORS的工作原理,以及如何正确隐含CORS,因为您的API和Web应用可能不在同一个域/源上

我们今天的关于asp.net-mvc-4 – ajax post works vs. angularjs $http无法使用ASP.NET MVC 4无法连接asp.net development server的分享已经告一段落,感谢您的关注,如果您想了解更多关于AngularJS $ http.post,asp.net MVC控制器为空、AngularJS + ASP.NET Web API + ASP.NET MVC身份验证、angularjs – 如何使用ASP.Net MVC查看.csthml作为Angular View而不是.html、ASP.NET MVC和Angularjs一起+ ASP.NET Web API的相关信息,请在本站查询。

本文标签: