小编Ask*_*ein的帖子

MVC中的Web API和REST API有什么区别?

我对REST API有一点了解.据我所知,它用于处理HTTP服务(GET POST PUT DELETE).

当我添加一个webapi控制器时,它为我提供了一些基本方法,如:

 public class Default1Controller : ApiController
    {
        // GET api/default1
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/default1/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/default1
        public void Post([FromBody]string value)
        {
        }

        // PUT api/default1/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/default1/5
        public void Delete(int id)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是Web API和REST API之间的区别是什么?

从rest定义开始,上面的代码基于REST,那么MVC中的普通Web API是什么?我有点困惑,因为有些人说你使用REST api的web api吗?

请提供对两者的更好理解.

c# api rest model-view-controller asp.net-web-api

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

如何在 ASP.NET Core 6 中使用 DateOnly/TimeOnly 查询参数?

从 ASP.NET API 中的 .NET 6 开始,如果要获取DateOnly(或TimeOnly) 作为查询参数,则需要单独指定其所有字段,而不是仅提供字符串(“2021-09-14”或“10: 54:53" 为TimeOnly) 就像你可以为 一样DateTime

如果它们是正文的一部分,我可以通过添加自定义 JSON 转换器 ( AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(...))) 来解决这个问题,但它不适用于查询参数。

我知道这可以通过模型绑定器修复,但我不想为每个包含DateOnly/TimeOnly. 有没有办法广泛修复这个应用程序?

演示:

假设您有以下操作:

[HttpGet] public void Foo([FromQuery] DateOnly date, [FromQuery] TimeOnly time, [FromQuery] DateTime dateTime)

下面是它在 Swagger 中的表示方式:

在此输入图像描述

我希望它表示为三个字符串字段:一个 for DateOnly、一个 forTimeOnly和一个 for DateTime(这个已经存在)。

PS:这不是 Swagger 问题,而是 ASP.NET 问题。如果我尝试?date=2021-09-14手动传递,ASP.NET 将无法理解它。

c# typeconverter model-binding asp.net-core-webapi .net-6.0

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

实体框架核心RC2表名称复数化

有没有办法在EF Core RC 2中执行此代码的操作?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
Run Code Online (Sandbox Code Playgroud)

c# pluralize tablename entity-framework-core

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

如何在EF Core 2.1.0中为Admin用户设定种子?

我有一个使用EF Core 2.1.0的ASP.NET Core 2.1.0应用程序.

如何使用Admin用户为数据库播种并为其授予管理员角色?我找不到任何关于此的文件.

c# asp.net-core asp.net-core-2.1 ef-core-2.1

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

在实体框架7中指定ON DELETE NO ACTION?

在Entity Framework 7中,当我尝试应用迁移时,我收到错误

在表'ChangeOrder'上引入FOREIGN KEY约束'FK_ChangeOrder_User_CreatedByID'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.
无法创建约束.查看以前的错误.

我知道在旧版本的Entity Framework中你可以通过添加来解决这个问题

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Run Code Online (Sandbox Code Playgroud)

到DbContext,但在EF7 modelBuilder似乎没有.Conventions它和谷歌只返回旧的EF 4虽然EF 6结果.

如何ON DELETE NO ACTION在Entity Framework 7中具体约束?

编辑:奥列格提供的答案显然是按照外键进行的,但是我想在全局范围内进行,因为使用一行代码来全局声明这一点会更容易,然后必须为每一个代码指定代码.我将最终拥有数百种关系.

编辑2:奥列格的代码

public class ChangeOrder
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public Int16? ApprovedByID { get; set; }
    public Byte ApprovalStatusID { get; set; }
    public Int16 AssignedToID { get; set; }
    public Int16 CreatedByID { get; set; }
    public Byte CurrentStatusID { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core

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

为什么在MultiBinding中转换值时会得到DependencyProperty.UnsetValue?

我有一个非常简单的IMultiValueConverter,它只是OR的两个值.在下面的示例中,我想使用同样简单的布尔型逆变器反转第一个值.

<MultiBinding Converter="{StaticResource multiBoolToVis}">
    <Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
    <Binding Path="ConditionB"/>
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)

和逆变器:

public class BoolInverterConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool)
        {
            return !((bool)value);
        }
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

当我包含boolInverter时,MultiValueConverter中的第一个值变为"DependencyProperty.UnsetValue".当我不使用转换器时没有问题(当然,除了我不是针对的逻辑).

我错过了什么吗?单步执行调试器会显示InverseBoolConverter正在反转我传递的值,但该值不会被"发送"到MultiValueConverter.

c# wpf xaml dependency-properties ivalueconverter

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

如何知道执行代码的当前操作系统/平台(Android/iOS)

使用Xamarin.Android和Xamarin.iOS,我现在需要共享代码部分中的当前操作系统.无论是enum,int还是字符串,都没关系.

我试过这个:

System.Environment.OSVersion
Run Code Online (Sandbox Code Playgroud)

对于某些内核版本信息,它始终是"Unix".

有关于Android的信息,例如

Android.OS.Build.VERSION
Run Code Online (Sandbox Code Playgroud)

但它需要在Android特定代码部分.有没有办法知道公共库中的当前操作系统?

c# xamarin.ios xamarin.android xamarin

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

绑定到DataTemplate中的ToString()方法

有没有简单的方法绑定到DataTemplate中的ToString()方法?我希望TextBlock的Text属性默认使用ToString()作为Text属性,但这不会发生.所以任何简单的方法:

<DataTemplate x:Key="myTemplate">
    <TextBlock Text="{Binding ToString()}"/>
<DataTemplate>
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml datatemplate

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

如何使用log4net将RollingFileAppender配置为按日期和大小滚动?

我配置log4net以使用复合RollingFileAppender,以便当前文件始终命名为logfile.log,所有后续文件都命名为logfile-YYYY.MM.dd.seq.log,其中seq是序列号,如果日志超过特定大小在一天之内.不幸的是,我在配置这样的设置方面收效甚微.

编辑:

我当前的配置粘贴在下面.它已根据几个答案进行了更新,使我足够接近我的需求.这将生成以下格式的文件:logfile_YYYY.MM.dd.log.seq

<log4net>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingFileAppender" />
    </root>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs\\logfile"/>
        <staticLogFileName value="false"/>
        <appendToFile value="true"/>
        <rollingStyle value="Composite"/>
        <datePattern value="_yyyy.MM.dd&quot;.log&quot;"/>
        <maxSizeRollBackups value="10"/>
        <maximumFileSize value="75KB"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="FATAL" />
        </filter>
    </appender>

</log4net>
Run Code Online (Sandbox Code Playgroud)

一个有趣的说明,设置

<staticLogFileName value="false"/>
Run Code Online (Sandbox Code Playgroud)

为true会导致记录器不写入任何文件.

xml configuration log4net composite rollingfileappender

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

发送XML时,AspNet WebApi POST参数为null

我有一个最初使用beta位的web api服务,我已经使用候选版本位进行了重建,现在我遇到了这个问题.

我有一个POST操作,它将复杂选项作为唯一参数.当我以json格式发送请求时,对象按预期反序列化,但如果我发送XML而不是参数为null.

在测试版中,我通过禁用模型绑定来解决这个问题,如Carlos Figueira的博客文章" 禁用ASP.NET Web API Beta上的模型绑定"中所述

然而,在RC中,他们已经删除了此方法正在实现的IRequestContentReadPolicy.

我的行动:

public List<Models.Payload> Post([FromBody]Models.AimiRequest requestValues)
{
  try
  {
    if (requestValues == null)
    {
      var errorResponse = new HttpResponseMessage();
      errorResponse.StatusCode = HttpStatusCode.NotFound;
      errorResponse.Content = new StringContent("parameter 'request' is null");
      throw new HttpResponseException(errorResponse);
    }
    var metadataParams = new List<KeyValuePair<string, string>>();
    foreach (Models.MetadataQueryParameter param in requestValues.Metadata)
    {
      metadataParams.Add(new KeyValuePair<string, string>(param.Name, param.Value));
    }
    List<Core.Data.Payload> data = _payloadService.FindPayloads(metadataParams, requestValues.ContentType, requestValues.RuleTypes);
    var retVal = AutoMapper.Mapper.Map<List<Core.Data.Payload>, List<Models.Payload>>(data);
    return retVal; // new HttpResponseMessage<List<Models.Payload>>(retVal);
  }
  catch (System.Exception ex) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

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