以上就是给各位分享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)
- 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)
客户端项目是纯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("/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的新手,正在尝试为我的新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
我用这个代码得到了一个404 Angular:
.when('#/second',{ urlTemplate:"Views/second.cshtml",controller:"MainController"})
Agular找不到second.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一起使用(无需剃须刀,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的相关信息,请在本站查询。
本文标签: