小编Tom*_*eck的帖子

AntiForgeryToken在ASP.Net MVC 4 RC中弃用

我刚刚安装了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的谷歌搜索.请帮忙.

谢谢

asp.net-mvc antiforgerytoken asp.net-mvc-3 asp.net-mvc-4

28
推荐指数
1
解决办法
2万
查看次数

Angular2 REST请求HTTP状态代码401更改为0

我正在开发一个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)

rest cors angular

25
推荐指数
3
解决办法
2万
查看次数

URL.Action在构造URL时包含id

我正在使用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解决方案.谢谢.

asp.net-mvc-routing url.action asp.net-mvc-3

23
推荐指数
3
解决办法
2万
查看次数

如何在Angular2中做响应组件

我正在进入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

22
推荐指数
1
解决办法
2万
查看次数

如何让Visual Studio 2017接受对csproj文件的修改

我开发了一个内部使用的代码生成器,其中代码资产(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)

c# msbuild microsoft.build visual-studio-2017

17
推荐指数
1
解决办法
1000
查看次数

SSO(单点登录)如何工作

我正试图绕过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的新请求?

谢谢.

authentication single-sign-on oauth-2.0

16
推荐指数
2
解决办法
1万
查看次数

ASP.Net Web Api在POST上没有绑定模型

我正在尝试将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. …

model-binding modelbinders asp.net-mvc-4 asp.net-web-api

13
推荐指数
2
解决办法
2万
查看次数

跨域发布到ASP.Net MVC应用程序

我正在开发一个应用程序,其中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应用程序的任何建议?

architecture asp.net-mvc jquery jsonp cross-domain

10
推荐指数
1
解决办法
1万
查看次数

如何在Visual Studio代码中缩小JavaScript文件

你知道Visual Studio Code的一个插件会缩小JS文件吗?我想在保存文件后立即缩小文件.

javascript visual-studio-code

10
推荐指数
1
解决办法
3万
查看次数

ASP.Net MVC 4的WebAPI没有正确绑定复选框?

我正在将WebAPI合并到我的开发中,并将所有表单提交发布到WebAPI控制器.我注意到复选框没有正确绑定到模型.我有一个表格使用:

@Html.CheckBoxFor(m => m.HasVideo)
Run Code Online (Sandbox Code Playgroud)

它会生成一个复选框和一个隐藏的表单元素.当我选中复选框(表示"true"值)时,我的WebAPI Post中的模型绑定反映了HasVideo属性的false.我将整个方法移动到传统的mvc控制器,绑定按预期工作.

有没有针对此的解决方法,或者是否有一些我缺少的东西?

asp.net-mvc asp.net-mvc-3 asp.net-web-api

9
推荐指数
1
解决办法
2650
查看次数