我刚刚安装了ASP.Net MVC 4 RC来取代ASP.Net MVC 4 beta.尝试运行现有应用程序时,我收到一条AntiForgeryToken已弃用的错误消息.这是我的代码:
using (Html.BeginForm("", "", FormMethod.Post, new { id = "MonthElectionForm" }))
{
@Html.AntiForgeryToken("AddEditMonthElection")
}
Run Code Online (Sandbox Code Playgroud)
----更新---
ASP.Net MVC 4 RC使得Salt属性对于ValidateAntiForgeryToken属性和AntiForgeryToken html帮助程序已经过时.所以,现在我的代码看起来像这样:
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult CreateCompany(CompanyDataEntryViewModel modelData)
{...}
Run Code Online (Sandbox Code Playgroud)
形成:
@using (Html.BeginForm("", "", FormMethod.Post, new { id = "CreateCompanyDataEntryForm" }))
{
@Html.AntiForgeryToken()
...
}
Run Code Online (Sandbox Code Playgroud)
查看生成的HTML,AntiForgeryToken仍会生成隐藏字段并提供加密值.我的行动仍然有效.但是我已经失去了在加密过程中指定密钥的能力.我不太确定这个过程是如何工作的,但在我告诉我之前我已经在动作和表单上设置了salt值.值必须匹配才能使操作接受帖子.那么,你现在如何设置盐值?我认为它与AntiForgeryConfig AdditionalDataProvider有关但我找不到任何关于如何使用AntiForgeryConfig AdditionalDataProvider的谷歌搜索.请帮忙.
谢谢
我正在开发一个Angular2应用程序.似乎当我的访问令牌到期时,401 HTTP状态代码在Response对象中变为值0.我收到401 Unauthorized但ERROR Response对象的状态为0.这阻止我捕获401错误并尝试刷新令牌.是什么导致401 HTTP状态代码被更改为HTTP状态代码0?
这是Firefox控制台的截图:
这是我的代码:
get(url: string, options?: RequestOptionsArgs): Observable<any>
{
//console.log('GET REQUEST...', url);
return super.get(url, options)
.catch((err: Response): any =>
{
console.log('************* ERROR Response', err);
if (err.status === 400 || err.status === 422)
{
return Observable.throw(err);
}
//NOT AUTHENTICATED
else if (err.status === 401)
{
this.authConfig.DeleteToken();
return Observable.throw(err);
}
else
{
// this.errorService.notifyError(err);
// return Observable.empty();
return Observable.throw(err);
}
})
// .retryWhen(error => error.delay(500))
// .timeout(2000, new Error('delay exceeded'))
.finally(() =>
{
//console.log('After the request...');
});
} …Run Code Online (Sandbox Code Playgroud) 我正在使用ASP.Net MVC.这是来自名为Course的控制器的代码片段:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
Run Code Online (Sandbox Code Playgroud)
viewmodel.ShowUrl获取"id"参数的值.所以viewmodel.ShowUrl变为"/ Course/Show/151"(id的值为151); 我希望能够根据用户交互在客户端上设置id部分.我希望viewmodel.ShowUrl的值为"/ Course/Show".
这对我来说似乎是个错误.我没告诉Url.Action包含id值.它正在独立完成.如果我想设置id值,那么我会做这样的事情:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
Run Code Online (Sandbox Code Playgroud)
那么,你如何阻止MVC添加id值?我可以将viewmodel.ShowUrl硬编码为"/ Course/Show",但这似乎是一个kludgy解决方案.谢谢.
我正在进入Angular2.我的目标是创建一个响应式应用程序,加载不同的组件以响应不同的媒体查询设备宽度.我的工作示例有一个MatchMediaService:
import { Injectable } from '@angular/core';
@Injectable()
export class MatchMediaService
{
constructor()
{
}
rules =
{
print: "print",
screen: "screen",
phone: '(max-width: 767px)',
tablet: '(min-width: 768px) and (max-width: 1024px)',
desktop: '(min-width: 1025px)',
portrait: '(orientation: portrait)',
landscape: '(orientation: landscape)',
retina: '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)'
};
Check = function (mq)
{
if (!mq)
{
return;
}
return window.matchMedia(mq).matches;
};
/**********************************************
METHODS FOR CHECKING TYPE
**********************************************/
IsPhone()
{
return window.matchMedia(this.rules.phone).matches;
};
IsTablet = function ()
{
return window.matchMedia(this.rules.tablet).matches;
};
IsDesktop = …Run Code Online (Sandbox Code Playgroud) responsive-design angular2-directives angular2-routing angular
我开发了一个内部使用的代码生成器,其中代码资产(POCO)是基于C#接口生成的.代码生成过程以编程方式将项目添加/删除到csproj文件.工作流程如下:开发人员在Visual Studio 2017中添加新的C#接口或删除现有的C#接口.如果开发人员首先保存项目文件然后运行代码生成器,那么一切都按预期工作.代码生成的资产可以添加到项目中(或删除),Visual Studio会相应地反映这些更改.但是,如果开发人员在运行代码生成器之前未能保存csproj文件,并且已删除了C#接口,则代码生成的资产不会从项目中删除,因为Visual Studio不接受csproj文件修改.
在代码生成器中,我实际上删除了对已删除的代码生成文件的引用,并保存了csproj文件.我通过在记事本中打开csproj来验证是否从csproj文件中删除了引用的文件.但是,只要我将Visual Studio引入焦点,Visual Studio就会识别出csproj文件已更改并询问我是否要丢弃,覆盖,另存为等,并且我的代码生成过程对csproj文件所做的更改将丢失.Visual Studio将对已删除文件的引用添加回csproj文件.我已经尝试了丢弃,覆盖,另存为等,我没有让Visual Studio接受新修改的csproj文件(删除了已删除文件的引用).
这是我删除代码生成资产的代码:
using Microsoft.Build.Evaluation;
using Microsoft.Build.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
public static void RemoveGeneratedFilesFromProject(String projectPath)
{
UnloadAnyProject();
var project = ProjectCollection.GlobalProjectCollection.LoadedProjects.FirstOrDefault(pr => pr.FullPath == projectPath);
//ATTEMPT TO SAVE PROJECT IN CASE DEVELOPER DID NOT...
project.Save();
//GET A LIST OF ITEMS CONTAINING PATH TO CODE-GENERATED ASSETS ("Generated\API")
IList<ProjectItem> generatedItemsList = project.GetItems("Compile").Where(item => item.EvaluatedInclude.Contains(@"Generated\Api")).ToList();
foreach (var item in generatedItemsList)
{
project.RemoveItem(item);
}
//SAVE PROJECT TO REFLECT ALL …Run Code Online (Sandbox Code Playgroud) 我正试图绕过SSO.我的理解是,SSO允许您登录一次并访问多个应用程序(如果您有权限).所以,我登录到App A.我建立了一个令牌.该令牌如何可供App B使用,因此我不必再次登录App B(假设用户有权使用A和B)?我的应用是AngularJs应用.我访问.Net WebAPis获取数据.
我可以看到我是否登录到App A并检索令牌然后通过将令牌传递给App B从App A启动App B.这样,App B具有令牌并且可以发送到服务器以确保用户可以访问B.但是,如果用户直接打开浏览器并转到App B,那么他们的会话如何与现有令牌建立?
如果答案是后端服务器上的会话状态,那么会话状态如何与App A中登录的用户匹配App B的新请求?
谢谢.
我正在尝试将JSON数据发布到Web Api方法,但JSON数据未绑定到模型.
这是我的模特:
[DataContract]
public class RegisterDataModel
{
[DataMember(IsRequired = true)]
public String SiteKey { get; set; }
[DataMember(IsRequired = true)]
public String UserId { get; set; }
[DataMember(IsRequired = true)]
public String UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的Web Api动作:
public class RegisterController : ApiController
{
public Guid Post([ModelBinder] RegisterDataModel registerDataModel)
{
if (!ModelState.IsValid)
{
throw new ModelStateApiException(ModelState);
}
var userProfileDataContract = userProfileBusinessLibrary.GetNewOne();
userProfileDataContract.UserId = registerDataModel.UserId;
userProfileDataContract.UserName = registerDataModel.UserName;
var userKey = userProfileBusinessLibrary.Register(registerDataModel.SiteKey, userProfileDataContract);
return userKey;
}
}
Run Code Online (Sandbox Code Playgroud)
在我添加[ModelBinder]之前,registerDataModel为null.添加[ModelBinder]后,registerDataModel是RegisterDataModel实例,但所有属性值都为null. …
我正在开发一个应用程序,其中HTML和javascript块被传递给不同的客户端.我可以通过将以下内容添加到Web配置文件来获取html/javascript块:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
这对于做GETS非常有用.我遇到的问题是使用jQuery跨域执行POST:
$.ajax(
{
type: 'POST',
url: url,
crossDomain: true,
data: JSON.stringify(data),
dataType: 'json',
contentType: 'application/json',
success: function(responseData, textStatus, jqXHR)
{
alert('Success');
},
error: function (responseData, textStatus, errorThrown)
{
alert('POST failed.');
}
});
Run Code Online (Sandbox Code Playgroud)
我会有很多客户在使用我的应用程序(希望如此).我考虑过使用代理,但我无法控制客户端服务器,所以我无法安装httpHandler来充当代理.
关于我如何将来自不同客户的json数据跨域转发到我的ASP.Net MVC应用程序的任何建议?
你知道Visual Studio Code的一个插件会缩小JS文件吗?我想在保存文件后立即缩小文件.
我正在将WebAPI合并到我的开发中,并将所有表单提交发布到WebAPI控制器.我注意到复选框没有正确绑定到模型.我有一个表格使用:
@Html.CheckBoxFor(m => m.HasVideo)
Run Code Online (Sandbox Code Playgroud)
它会生成一个复选框和一个隐藏的表单元素.当我选中复选框(表示"true"值)时,我的WebAPI Post中的模型绑定反映了HasVideo属性的false.我将整个方法移动到传统的mvc控制器,绑定按预期工作.
有没有针对此的解决方法,或者是否有一些我缺少的东西?
asp.net-mvc ×3
angular ×2
architecture ×1
c# ×1
cors ×1
cross-domain ×1
javascript ×1
jquery ×1
jsonp ×1
modelbinders ×1
msbuild ×1
oauth-2.0 ×1
rest ×1
url.action ×1