小编Ant*_*t P的帖子

是否有从JSON Web服务返回错误状态的传统方法?

我有一个.NET .ashx处理程序,它接收一个jQuery AJAX帖子,将Web服务请求格式化为第三方服务并使用结果.成功时,它使用相关信息实例化一个匿名对象并格式化JSON响应字符串.

如果Web服务错误,我会执行以下操作:

context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.StatusDescription = wsResult.ErrorCode;
Run Code Online (Sandbox Code Playgroud)

这使得jQuery AJAX错误回调可以轻松访问状态代码和描述; 但是,我实现这个的方式是非常武断的.

在做了一些阅读之后,我无法找到以下问题的确定答案:是否存在可接受的通用约定(或 - 甚至 - 规范),用于将错误状态返回到基于JSON的AJAX调用,这允许任何消费者知道期待什么,或者这是任意其他函数调用的返回类型?

那么,这是一种将错误状态返回给AJAX调用者的完全可接受的方式,还是有一种格式化JSON错误响应的"正确"方式?

c# asp.net ajax jquery json

19
推荐指数
1
解决办法
6134
查看次数

ADFS身份验证期间的间歇重定向循环

我正在使用Owin配置我的ASP.NET MVC 5(.NET 4.5,IIS 7/8)应用程序以对第三方ADFS设置进行身份验证:

app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
});

app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
    Wtrealm = Settings.Auth.Wtrealm,
    MetadataAddress = Settings.Auth.MetadataAddress
});
Run Code Online (Sandbox Code Playgroud)

我还有一个自定义身份验证过滤器(与之配合使用AuthorizeAttribute):

public class OwinAuthenticationAttribute : ActionFilterAttribute, IAuthenticationFilter
{
    public void OnAuthentication(AuthenticationContext filterContext)
    {
        var user = filterContext.RequestContext.HttpContext.User;

        var authenticated = user.Identity.IsAuthenticated;
        if (!authenticated)
        {
            return;
        }

        /* Redirect to profile setup if not already complete */
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法在一半的时间内工作正常,但有时,在初始登录时,应用程序和ADFS登录之间将发生重定向循环.这似乎是特定于会话的(并非所有用户同时发生),并且一旦发生重定向循环,它似乎会继续发生,直到应用程序池刷新.

当重定向循环发生时,我仍然可以看到(在Chrome的"网络"标签中)看起来像ADFS发布的有效令牌.

我很难分离根本原因但我发现的是 - 当循环没有发生时,user.Identity是类型ClaimsIdentity而且IsAuthenticated是 …

.net c# ws-federation owin asp.net-mvc-5

12
推荐指数
1
解决办法
5586
查看次数

UrlHelper.Action包含不需要的附加参数

我在控制器中有一个方法ApplicationsController,我需要获取操作方法的基本URL:

public ActionResult MyAction(string id)
{
    var url = Url.Action("MyAction", "Applications");
    ...
}
Run Code Online (Sandbox Code Playgroud)

问题是这包括string id当前路由数据,当我需要URL时(URL用于在基于URL的查找中从CMS获取内容).

我试过传递nullnew { }作为routeValues参数无济于事.

匹配路由如下(高于所有其他路由):

routes.MapLowercaseRoute(
    name: "Applications",
    url: "applications/{action}/{id}",
    defaults: new { controller = "Applications",
                    action = "Index", id = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)

我已经看到了其他一些问题,但它们似乎没有一个可行的解决方案.目前,我正在使用硬编码控制器中的路径; 但是,我希望能够将其抽象为动作过滤器,因此我需要能够生成URL.

是否有一种干净/传统的方法来防止这种行为?

c# urlhelper asp.net-mvc-4

11
推荐指数
3
解决办法
7334
查看次数

在编辑器模板中迭代集合时,NameFor会生成错误的名称

假设我有一个类型为集合的视图,例如List<ItemViewModel>:

@model List<ItemViewModel>

@for(int i = 0; i < Model.Count; i++)
{
    @Html.EditorFor(m => m[i].Foo)
    @Html.EditorFor(m => m[i].Bar)
}
Run Code Online (Sandbox Code Playgroud)

Foo并且Bar只是字符串属性.

这产生以下形式的HTML名称属性[i].Foo并且[i].Bar,其中,当然,是正确的,在一个形式发布时正确地结合.

现在假设,上面的视图是一个编辑器模板,它是这样渲染的(其中Model.Items是a List<ItemViewModel>):

@model WrappingViewModel

@Html.EditorFor(m => m.Items)
Run Code Online (Sandbox Code Playgroud)

突然之间,编辑器模板中生成的名称的形式就是 - 例如 - Items.[i].Foo.默认的模型绑定器不能像预期的那样绑定它Items[i].Foo.

这在第一个场景中运行良好 - 视图不是编辑器模板 - 并且在集合是属性的情况下工作正常,而不是整个模型:

@Html.EditorFor(m => m.Items[i].Foo)
Run Code Online (Sandbox Code Playgroud)

它仅在模型本身是集合视图是编辑器模板时失败.

有几种方法可以解决这个问题,其中没有一个是理想的:

  • 将编辑器模板键入单个实例ItemViewModel- 这不是好事,因为相关的实际模板包含用于添加到集合中/从集合中删除的附加标记.我需要能够使用模板中的整个集合.
  • 将其包含List<ItemViewModel>在另一个属性中(例如通过实现ItemListViewModel)并将其传递给模板 - 这也不是理想的,因为这是一个企业应用程序,我宁愿不用多余的包装视图模型混乱.
  • 手动生成内部编辑器模板的标记以生成正确的名称 - 这是我目前正在做的但我宁愿避免它,因为我失去了HtmlHelpers的灵活性.

所以,问题是:为什么NameFor(并因此EditorFor)在这种特殊情况下表现出这种行为,当它适用于轻微变化时(即它是有意的,如果是,为什么)?是否有一种简单的方法来解决这种行为而没有上述任何缺点?

根据要求,完整代码重现: …

c# asp.net-mvc asp.net-mvc-4

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

Ruby数组是真正的数组吗?

我知道Ruby数组都是动态分配动态调整大小的; 但是,我似乎无法找到关于它们是否是真正数组的任何明确信息; 即它们在内存中是连续的(更具体地说,它们所持有的引用在内存中是连续的).

我的假设是增加Ruby数组的大小需要将整个数组重新分配到更大的连续内存块(如果需要).

这是正确的,还是"阵列"在这种情况下用词不当?

ruby arrays

9
推荐指数
2
解决办法
542
查看次数

C#中的泛型和约定

我有一个.NET服务层的接口,它反过来将通过Web服务与第三方系统通信.这可以处理与第三方系统功能相关的许多不同任务(它实际上是一个定制的CRM系统,但由于上下文不相关,我会将其换成一些微不足道的东西).

界面看起来像这样:

public interface IMyService
{
    CarModel GetCar(string registration);
    CarModel AddCar(Car car);
    PersonModel GetPerson(string personId);
    PersonModel AddPerson(Person person);
}
Run Code Online (Sandbox Code Playgroud)

现在,我的模型目前的工作方式如下:我有一个BaseResponseModel,每个都SomethingModel继承.每个SomethingModel包含一些基本属性,也包含一个Something- 像这样:

基础响应模型

public class BaseResponseModel
{
    public List<string> Errors { get; set; }
    public bool HasErrors
    {
        get
        {
            return (Errors != null && Errors.Count > 0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

具体的反应模型

public class CarModel : BaseResponseModel
{
    public Car Car { get; set; }
}

public class PersonModel : BaseResponseModel
{
    public …
Run Code Online (Sandbox Code Playgroud)

c# architecture asp.net generics

8
推荐指数
1
解决办法
305
查看次数

电子邮件中的HTML <base>标记

我们有一个内容管理的解决方案(SDL Tridion,具体而言;问题更为一般),其中包括多个具有不同语言内容的网站.它们共享许多基于Razor的模板,这些模板用于在发布页面时呈现具有特定注入内容的HTML片段.

CRM也通过CMS进行管理,同样的模板用于创建电子邮件新闻稿.这些HTML电子邮件包含图像,这些图像将发布到管理相关分发列表的任何站点.由于模板系统是通用的,并且CMS没有最终产品的绝对URL的概念,因此这些图像都嵌入了相对地址.我们有能力将绝对URL作为元数据应用于CMS中的不同网站,并编写.Net扩展以将这些URL格式化为渲染图像标记; 但是,这会给这项工作增加相当大的开销.

我们可以通过在电子邮件标记<base href="..." /><head>部分中使用标记来解决此问题.这似乎在Outlook中起作用,至少; 但是,我无法找到有关电子邮件客户端执行和不支持此标记的最新信息.

那么问题是:电子邮件客户端(特别是基于浏览器的客户端)的支持程度如何<base>

html email-client base html-email

7
推荐指数
1
解决办法
4552
查看次数

如何从控制器调用EditorFor

我有位置列表

public class Location
{
    public string LocationName { get; set; }
    public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我为这个类创建了编辑器模板

<div>
   <span>@Html.TextBoxFor(a => a.LocationName)</span>
   <span style="color: red;">@Html.TextBoxFor(a => a.Address )</span>
</div>
Run Code Online (Sandbox Code Playgroud)

问题是,位置加载了ajax到我的页面,然后我将结果发送回服务器.但是如何使用特定索引获取此位置?我的意思是,对于第一个位置,它将生成如下:

<input type="text" name="Locations[0].LocationName" />
Run Code Online (Sandbox Code Playgroud)

对于第二个位置,当我按"添加位置"按钮时,它应该从服务器获取此位置(从控制器的操作作为html字符串)但索引1不是0,因为它是下一个位置.

有可能实现吗?或者我做错了什么?

c# asp.net-mvc

7
推荐指数
1
解决办法
1341
查看次数

ASP.Net - 从RepeaterItem获取数据

我是ASP.Net的新手,我不确定我是否会以正确的方式解决这个问题.我有一个Repeater,它绑定到一个"图像"对象列表.在每个RepeaterItem内是一个复选框,我有一个按钮OnClick事件,我想显示已检查的Image对象的一些属性.

标签更新,但元数据为空.DataBinder.Eval(i.DataItem,"FileName")将返回null,但我不确定为什么?我想也许复选框的回发导致了问题,但是如果我尝试在发生任何回发之前显示数据,我仍然会遇到同样的问题,所以也许我没有正确地获取属性.或者我是以完全错误的方式解决这个问题?任何帮助赞赏.

码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string importPath = Server.MapPath("~/Images/ForImport");
        ImageProcessor processor = new ImageProcessor(importPath);

        rptImageList.DataSource = processor.ImageList;
        rptImageList.DataBind();
    }
}

protected void btnImport_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem i in rptImageList.Items)
    {
        CheckBox chk = i.FindControl("chkSelectImage") as CheckBox;
        if (chk.Checked)
        {
            Testlabel.Text += "Selected: " + DataBinder.Eval(i.DataItem, "FileName");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<asp:Repeater ID="rptImageList" runat="server">
    <ItemTemplate>
    <div class="photoinstance">
        <asp:Image runat="server" ImageUrl='<%#"Images/ForImport/" +DataBinder.Eval(Container.DataItem, "FileName") %>' />
        <asp:CheckBox ID="chkSelectImage" AutoPostBack="true" runat="server"/>
        <p><%#Eval("FileName")%> - …
Run Code Online (Sandbox Code Playgroud)

c# asp.net checkbox repeater dataitem

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

在OrderBy中维护子序列顺序

假设我有一个具有整数Day属性的类和一个IEnumerable<T>对象,其中的天数分别为2,3,4,1,3,3和5(按此顺序).

有没有办法保证子序列的顺序(例如)o.Day == 3从其元素在原始列表中的相对位置维护而不需要显式的自定义实现IEnumerable

c# sorting ienumerable

6
推荐指数
1
解决办法
864
查看次数